7. SpringBoot整合
SpringBoot极大的简化的SSM整合过程,只需要加入相关依赖和少量配置即可
下面演示SpringBoot整合SpringMVC和MyBatis
新建Maven项目
- 使用SpringInitializer初始化Sprign项目
- 如果出现初始化错误,在settings中配置代理
- 测试连接是否正常
- 初始项目配置
- 选择项目依赖
- 完成项目创建
-
项目提示信息:
Windows Defender 可能影响项目的构造和性能,windows defender会扫描这些文件夹,IDEA可以自动修复这个问题,点击
fix
自动排除扫描
-
或者手动排除项
4.1. windwos设置 - 更新和安全
4.2. Windows Defender - 添加排除项
4.3. 排除文件夹
导入依赖
pom.xml
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
添加配置
- application.properties
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Hongkong
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
- log4j.properties
### 设置###
# debug 日志级别,常用的4个日志级别:ERROR、WARN、 INFO、DEBUG
log4j.rootLogger = debug,stdout
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
添加Druid连接池配置类
-
application.yml
以下属性都是druid连接池属性
spring:
datasource:
druid:
username: root
password: root
url: jdbc:mysql://127.0.0.1:3306/mybatis-01?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Hongkong
driver-class-name: com.mysql.cj.jdbc.Driver
#初始化时建立物理连接的个数,默认值0
initial-size: 1
#最大连接池数量,默认值8
max-active: 20
#最小连接池数量
min-idle: 1
#获取连接时最大等待时间,单位毫秒。配置了maxWait之后,
#缺省启用公平锁,并发效率会有所下降,
#如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
max-wait: 60000
#是否缓存preparedStatement,也就是PSCache。
#PSCache对支持游标的数据库性能提升巨大,比如说oracle。
#在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。
#5.5及以上版本有PSCache,建议开启。默认false不开启
pool-prepared-statements: true
#要启用PSCache,必须配置大于0,当大于0时,
#poolPreparedStatements自动触发修改为true。
#在Druid中,不会存在Oracle下PSCache占用内存过多的问题,
#可以把这个数值配置大一些,比如说100 ,默认值 -1
max-open-prepared-statements: 20
#用来检测连接是否有效的sql,要求是一个查询语句。
#如果validationQuery为null,testOnBorrow、testOnReturn、
#testWhileIdle都不会其作用。在mysql中通常为select 'x',在oracle中通常为
#select 1 from dual
validation-query: SELECT 'x'
#申请连接时执行validationQuery检测连接是否有效,
#做了这个配置会降低性能。默认false关闭
test-on-borrow: false
#归还连接时执行validationQuery检测连接是否有效,
#做了这个配置会降低性能,默认false关闭
test-on-return: false
# 建议配置为true,不影响性能,并且保证安全性。
# 申请连接的时候检测,如果空闲时间大于
# timeBetweenEvictionRunsMillis,
# 执行validationQuery检测连接是否有效。默认false
test-while-idle: true
# 有两个含义:
# 1) Destroy线程会检测连接的间隔时间
# 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
time-between-eviction-runs-millis: 60000
#Destory线程中如果检测到当前连接的最后活跃时间和当前时间的差值大于
#minEvictableIdleTimeMillis,则关闭当前连接。
min-evictable-idle-time-millis: 300000
#属性类型是字符串,通过别名的方式配置扩展插件,
#常用的插件有:
#监控统计用的filter:stat
#日志用的filter:log4j
#防御sql注入的filter:wall
filters: stat,wall,log4j #配置多个英文逗号分隔
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
useGlobalDataSourceStat: true
注意:添加了Druid连接池,就需要把之前配置的数据库连接去掉
- application.properties
# WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
#是否启用StatFilter默认值false
spring.datasource.druid.web-stat-filter.enabled= true
spring.datasource.druid.web-stat-filter.url-pattern= /*
spring.datasource.druid.web-stat-filter.exclusions= *.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
#身份标识 从session中获取
#spring.datasource.druid.web-stat-filter.session-stat-enable=
#spring.datasource.druid.web-stat-filter.session-stat-max-count=
#身份标识 从cookie中获取
#spring.datasource.druid.web-stat-filter.principal-session-name=
#spring.datasource.druid.web-stat-filter.principal-cookie-name=
#spring.datasource.druid.web-stat-filter.profile-enable=
# StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
#是否启用StatViewServlet(监控页面)默认值为false(考虑到安全问题默认并未启动,如需启用建议设置密码或白名单以保障安全)
spring.datasource.druid.stat-view-servlet.enabled= true
spring.datasource.druid.stat-view-servlet.url-pattern= /druid/*
spring.datasource.druid.stat-view-servlet.reset-enable= false
spring.datasource.druid.stat-view-servlet.login-username= admin
spring.datasource.druid.stat-view-servlet.login-password= admin123
spring.datasource.druid.stat-view-servlet.allow= 127.0.0.1
spring.datasource.druid.stat-view-servlet.deny= 192.168.16.200
# Spring监控配置,说明请参考Druid Github Wiki,配置_Druid和Spring关联监控配置
#spring.datasource.druid.aop-patterns= # Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
-
配置Druid数据源
使用配置类添加druid数据源
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.druid")
public DataSource dataSourceOne(){
return DruidDataSourceBuilder.create().build();
}
}
其实启动类就是一个配置类,可以将上述代码加入到启动类中
@SpringBootApplication
public class Ssm0731Application {
public static void main(String[] args) {
SpringApplication.run(Ssm0731Application.class, args);
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.druid")
public DataSource dataSourceOne(){
return DruidDataSourceBuilder.create().build();
}
}
测试获取的连接
@SpringBootTest
class Springboot01MvcMybatisApplicationTests {
@Autowired
DataSource dataSource;
@Test
void contextLoads() throws SQLException {
System.out.println(dataSource.getConnection());
}
}
代码环境
使用逆向工程生成model类和mapper.xml
注意model中添加持久化注解@Id等,关联关系需要手动添加
mapper.xml中的SQL删除掉,因为通用mapper已经包含这些SQL了。只保留SQL片段(列名)
配置热部署
开发时,每次修改代码需要重启,添加springBoot的热部署依赖,修改完代码自动编译(idea 2020测试无效)
-
开启auto make自动编译
快捷键
Alt + Ctrl + Shift + /
允许auto make启动,即使开发的应用程序当前正在运行。
设置自动编译项目
添加依赖
<!-- 热部署模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!-- 这个需要为 true -->
<optional>true</optional>
</dependency>