Spring-Boot 进一步了解
1.配置类和控制器分离
配置类的注解
@SpringBootApplication—带扫描,自动配置=
相当于
@Configuration
@ComponentScan
@EnableAutoConfiguration
常见报错可能情况
1.配置类run
2.没有导入web
2.springboot项目结构
static----静态资源文件
templates----模板文件jsp等
application.properties----配置文件
3.打包,独立运行
1.导包
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2.打包### 4.热启动
导包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
5.yml
语法
k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
server:
port: 8081
path: /hello
属性和值也是大小写敏感;
6.读取配置-配置文件的注入
1.多个配置读取到一个类中
<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
写一个对应的类来获取需要的属性值
@ConfigurationProperties注解
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}
要提供getter、setter方法
属性 perfix=“jdbc”:从配置中通过前缀过滤配置项,进行同属性名的配置
@Component交给spring管理
2.读取一个配置
@Value("${server.port}")
private String port;
"${server.port}"找值—@Value将值赋给port
7.springboot多环境
1.通过Application.yml 单个文件配置
— 区分不同的环境
#多环境的配置
#这里是激活我们需要的环境
spring:
profiles:
active: xxx #这里激活的要对应下面的profiles的名字
#这里表示是我们提供的环境 ---是区分
---
server:
port: 9999
spring:
profiles: dsq
---
server:
port: 8888
spring:
profiles: xxx #指定属于哪个环境
2.多个文件配置
文件名称:application-xxx 标准命名
主配置文件application.yml中激活其他我们需要的环境
激活特定环境
1、在配置文件中指定 spring.profiles.active=dev
2、命令行: 部署环境
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod;
可以直接在测试的时候,配置传入命令行参数
3、虚拟机参数; 开发环境
-Dspring.profiles.active=dev
8.springboot 测试
1.导包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ApplicationConfig.class)
9.springboot 日志框架
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- scan="true" scanPeriod="1 seconds" -->
<configuration debug="true" >
<!-- 日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n"/>
<!--ConsoleAppender 控制台打印-->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<!--定义控制台输出格式-->
<encoder>
<!--采取了上面的格式-->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--文件格式的输出日志-->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--存放日志的位置-->
<file>logs/springboot.log</file>
<!--根据大小和事件滚动保存-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--文件名称-->
<fileNamePattern>logs/springboot-%d{yyyyMMdd}-%i.log.gz</fileNamePattern>
<!--单个文件最大保存的大小-->
<maxFileSize>1KB</maxFileSize>
<!--最多保存的历史-->
<maxHistory>30</maxHistory>
<!--总大小-->
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
<!--定义控制台输出格式-->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--root是默认的logger 全局 这里设定输出级别是debug-->
<root level="info">
<!--定义了两个appender,日志会通过往这两个appender里面写-->
<appender-ref ref="stdout"/>
<appender-ref ref="file"/>
</root>
<!--设置局部,指定的包-->
<!--如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
<!--additivity表示要不要使用rootLogger配置的appender进行输出-->
<logger name="cn.dsq" level="warn" additivity="false">
<appender-ref ref="stdout"/>
<appender-ref ref="file"/>
</logger>
</configuration>
1.日志打印器
private static final Logger log =
LoggerFactory.getLogger(Hello.class);
后面用lombok插件只需要一个注解@Slf4j
2.lombok
导包–maven repository 仓库中去找需要的包
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.12</version>
<scope>provided</scope>
</dependency>
装插件
file—setting ----plugins
10. thymeleaf 集成
1.导包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.创建模板(Html)
<html xmlns:th="http://www.thymeleaf.org">
</html>
3.Controller访问
11. 静态资源处理
http://www.webjars.org
导入jquery
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.4.1</version>
</dependency>
导入jquery的js
<script src="/webjars/jquery/3.4.1/jquery.js"></script>
首页和图片
//首页
resources/index.html
//图片
resources/favicon.ico
12. Mvc Configur
1.拦截器interceptor
1.自己写个类 实现HandlerInterceptor
/**
* 自定义的拦截类
*/
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截成功拦截成功----------------");
return true;
}
}
2.配置文件注册 配置类要实现 WebMvcConfigurer 并覆写对应方法
/**
* 拦截器的配置
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
//配置拦截器,并添加拦截的资源,以及放行的请求
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**").excludePathPatterns("/login");
}
2.viewController–很少使用
类似拦截器的配置,也要在配置器中覆写一个方法
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/xx").setViewName("hello2.html");
}
13. datasources
1.导包
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.20</version>
</dependency>
<!-- mysql 数据库驱动. -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
2.手动配置
jdbc:
username: root
password: 123456
url: jdbc:mysql:///ssm
driver-class-name: com.mysql.jdbc.Driver
@Bean
@ConfigurationProperties(prefix = "jdbc")
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
return dataSource ;
}
3.自动配置-----------推荐使用
spring:
datasource:
username: root
password: root
url: jdbc:mysql:///crm
driver-class-name: com.mysql.jdbc.Driver
14. 集成Mybatis
1.导包
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
2.配置
#mybatis
mybatis:
mapper-locations: classpath:cn/dsq/springboot/mapper/*Mapper.xml
15.PageHelper
1.导入包
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
2.service实现
public Page<Employee> findPage(Object query){
//设置当前页以及每页条数
PageHelper.startPage(1,5);
//返回查询结果
return employeeMapper.findPage(query);
}