一、简介
Spring Boot是Spring公司的一个顶级项目,和Spring Framework是一个级别的。
不需要编写xml配置文件,通过利用pring Framework 4 自动配置特性完成配置。
启动器
就是引入相关的依赖,通过java配置的方式完成自动配置。
1. 特征
-
使用Spring Boot可以创建独立的Spring应用程序。
-
在Spring Boot中直接嵌入了Tomcat、Jetty、Undertow等Web 容器,所以在使用SpringBoot做Web开发时不需要部署WAR文件。
-
通过提供自己的启动器(Starter)依赖,简化项目构建配置。
-
尽量的自动配置Spring和第三方库。
-
绝对没有代码生成,也不需要XML配置文件。
2. 版本
-
SNAPSHOT:快照版,即开发版。
-
CURRENT:最新版,但是不一定是稳定版。
-
GA:General Availability,正式发布的版本。
3. 核心
起步依赖
起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。 简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
自动配置
Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定 Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。
二、启动类
启动类就是SpringBoot应用的入口,基于mian方法运行的。1. 新建启动类
启动类在启动时会扫描同包或者子包下的注解,不能直接放在java文件夹中,必须在包中新建启动类。所以应该放在基础包下。
命名规范:xxxApplication
例:
@SpringBootApplication public class Springboot01Application { public static void main(String[] args) { SpringApplication.run(Springboot01Application.class, args); } }
2. 启动类与启动器区别
启动类是项目的入口,启动器表示jar包的坐标
三、resources目录结构
1. 目录结构
static:存放静态资源(css、js、图片、静态html等)
templates:存放模板引擎 (thymeleaf,FreeMarker等视图模板)
application.properties:SpringBoot配置文件。也可以自定义config文件夹存放配置文件。
注意:
static目录是SpringBoot可以直接识别的目录,会将其中的静态资源编译到web项目中,并放到tomcat中使用。静态资源的访问路径中无需声明static。例如: http://localhost:8080/a.png。
IDEA中经常出现放在static下的静态文件即使重启也不被编译。需要通过Maven面板进行清空缓存,重新编译启动即可识别。
四、SpringBoot配置文件
SpringBoot提供一个名为 application 的全局配置文件,支持properties和yml格式
1. properties格式
例:
#配置端口号 server.port=8888 #配置项目名:必须以'/'开头,不能以'/'结尾 server.servlet.context-path=/test
2. yml格式
YML格式配置文件的扩展名可以是yaml或者yml,非常适合用来做以数据为中心的配置文件。
2.1 格式要求
-
大小写敏感
-
使用缩进代表层级关系
-
缩进不允许使用tab,只允许空格
-
相同的部分只出现一次
-
'#'表示注释
2.2 书写格式
-
字面量:date、boolean、string、number、null
-
对象:键值对。map、hash、javabean
-
数组:array、list、queue、set
① 字面量
server: port: 8888
②对象
user1: {"id":10, "name":"admin"} user2: id: 20 name: guest users2: - id: 1000 name: users1000 - id: 2000 name: users2000 map: k1: id: 19 name: map1 k2: id: 29 name: map2
③数组
myparam: list1: v1,v2,v3 list2: - v11 - v12 - v13 array1: a1,a2,a3 array2: - a11 - a12 - a13
3. 配置文件存放位置
-
当前项目根目录中
-
当前项目根目录下的一个/config子目录中
-
项目的resources即classpath类路径中
-
项目的resources即classpath类路径下的/config目录中
4. 配置文件加载顺序
可以有多个配置文件
4.2 不同位置的加载顺序
-
config/application.properties
-
config/application.yml
-
application.properties
-
application.yml
-
resources/config/application.properties
-
resources/config/application.yml
-
resources/application.properties
-
resources/application.yml
4.3 不同格式加载顺序
在同一个目录中的配置文件先加载properties格式 后加载yml格式的。
对于多个配置文件配置了同一个属性,最先配置的生效。
五、整合MyBatis
1. 依赖启动器
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
2. 配置文件
application.yml
# 数据源(数据库连接池) 配置 spring: datasource: url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver mybatis: # 加载mybatis配置文件(mybatis有特殊配置时使用) # config-location: classpath:mybatis/mybatis-config.xml # 加载MyBatis的mapper.xml映射文件(映射接口和映射文件路径不一致时使用) # mapper-locations: classpath:mybatis/*.xml type-aliases-package: com.xxx.pojo # 实体类定义别名
3. 启动类
在启动类上使用@MapperScan注解表示扫描指定包中的mapper接口
不写@MapperScan时要在每个Mapper接口上加@Mapper注解
六、整合Druid
1. 启动器
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.11</version> </dependency>
2. 配置文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useSSL=false&characterEncoding=utf8 username: root password: root # 使用的连接池 type: com.alibaba.druid.pool.DruidDataSource # 连接池的配置信息 druid: # 初始化大小,最小,最大 initial-size: 5 max-active: 30 min-idle: 5 # 配置获取连接等待超时的时间 max-wait: 60000 validation-query: SELECT 1 FROM DUAL #配置一个连接在池中最小生存的时间,单位是毫秒 min-evictable-idle-time-millis: 300000 test-while-idle: true # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 filters: stat,wall,slf4j # 配置DruidStatViewServlet stat-view-servlet: # 登录名 login-username: admin # 登录密码 login-password: admin url-pattern: /druid/* # IP白名单(没有配置或者为空,则允许所有访问) allow: 192.167.10.1,127.0.0.1 reset-enable: false # 必须启用,要不会404 enabled: true mybatis: # 起别名 type-aliases-package: com.xxx.pojo # 扫描映射文件 # mapper-locations: classpath:mybatis/*.xmlapplication.yml
七、整合Junit
1. 添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency>
2. 新建测试类
测试类需要有启动类的支持,
在test中与启动器相同的包路径下新建测试类,或者添加 @SpringBootTest (classes={启动器类名.class})
注意:
-
测试类不能叫做Test
-
测试方法返回值必须是void
-
测试方法必须没有参数
@SpringBootTest public class MyTest { @Autowired UserMapper userMapper; @Test public void test(){ User user = userMapper.selectById(1L); } }
在springBoot2.4之前使用整合单元测试需要写 @SpringBootTest (classes={启动器类名.class})和RunWith(SpringRunner.class)
八、整合PageHelper
Spring Boot整合PageHelper不需要做任何配置文件的配置,添加依赖后就可以直接使用。
1. 添加依赖
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.2</version> </dependency>
2. 直接使用
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
@Service @Transactional public class UserServiceImpl implements UserService{ @Autowired private UserMapper userMapper; public PageInfo<User> queryByPage(int pageNumber, int pageSize){ // pageNumber当前页码 pageSize每页显示的条数 PageHelper.startPage(pageNumber,pageSize); // 查询全部,查询方法必须是查询多行结果,且没有分页语法。否则无法在sql后面拼接limit子句。 List<User> users = userMapper.selectAll(); // PageInfo是分页查询所有查询结果封装的类,所有的结果都从这个类取 PageInfo<User> pageInfo = new PageInfo<>(users); return pageInfo; } }UserServiceImpl.java
PageHelper.startPage()要写在查询数据库代码之上。
底层拦截MyBatis的执行器根据传入的pageNum和pageSize进行sql的改造:查询总条数、动态拼接limit进行分页查询
九、整合logback
Logback是由log4j创始人设计的一个开源日志组件。
Spring Boot默认使用Logback组件作为日志管理。
在Spring Boot项目中我们不需要额外的添加Logback的依赖,因为在spring-boot-starter或者spring-boot-starter-web中已经包含了Logback的依赖。
1. Logback读取配置文件的步骤
-
在classpath下查找文件logback-test.xml
-
如果文件不存在,则在classpath下查找logback.xml
2. 使用默认的logback.xml
logging: level: # 根日志级别 root: warn # 具体包日志级别 com.xxx.mapper: debug file: name: mylogs/my.log
3. 自定义logback
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <!--定义日志文件的存储地址--> <property name="LOG_HOME" value="logs/" /> <!-- 控制台输出 --> <appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender"> <!-- 日志输出编码 --> <layout class="ch.qos.logback.classic.PatternLayout"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </layout> </appender> <!-- 按照每天生成日志文件 --> <appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/server.%d{yyyy-MM-dd}.log</FileNamePattern> <MaxHistory>30</MaxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </layout> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!-- 日志输出级别 --> <root level="info"> <appender-ref ref="Stdout" /> <appender-ref ref="RollingFile" /> </root> <logger name="com.xxx.mapper" level="Trace"></logger> </configuration>logback.xml
标签:SpringBoot,配置文件,Spring,配置,application,mybatis,yml From: https://www.cnblogs.com/giaogiaoyang/p/17834567.html