一、简介
Spring Boot是Spring公司的一个顶级项目,和Spring Framework是一个级别的。
不需要编写xml配置文件,通过利用pring Framework 4 自动配置特性完成配置。
启动器
就是引入相关的依赖,通过java配置的方式完成自动配置。
1. 特征
-
-
在Spring Boot中直接嵌入了Tomcat、Jetty、Undertow等Web 容器,所以在使用SpringBoot做Web开发时不需要部署WAR文件。
-
通过提供自己的启动器(Starter)依赖,简化项目构建配置。
-
尽量的自动配置Spring和第三方库。
-
-
SNAPSHOT:快照版,即开发版。
-
CURRENT:最新版,但是不一定是稳定版。
-
GA:General Availability,正式发布的版本。
3. 核心
自动配置
@SpringBootApplication public class Springboot01Application { public static void main(String[] args) { SpringApplication.run(Springboot01Application.class, args); } }

static:存放静态资源(css、js、图片、静态html等)
templates:存放模板引擎 (thymeleaf,FreeMarker等视图模板)
application.properties:SpringBoot配置文件。也可以自定义config文件夹存放配置文件。
#配置端口号 server.port=8888 #配置项目名:必须以'/'开头,不能以'/'结尾 server.servlet.context-path=/test
2. yml格式
YML格式配置文件的扩展名可以是yaml或者yml,非常适合用来做以数据为中心的配置文件。
2.1 格式要求
-
大小写敏感
-
使用缩进代表层级关系
-
缩进不允许使用tab,只允许空格
-
相同的部分只出现一次
-
'#'表示注释
2.2 书写格式
-
-
对象:键值对。map、hash、javabean
-
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类路径中
-

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. 配置文件
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/*.xml
七、整合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)
八、
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.2</version> </dependency>
2. 直接使用
@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; } }
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.
2. 使用默认的logback.xml
logging:
level:
# 根日志级别
root: warn
# 具体包日志级别
com.xxx.mapper: debug
file:
name: mylogs/my.log
3. 自定义logback
<?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>