本文共 6923 字,大约阅读时间需要 23 分钟。
SprintBoot 默认使用的是 HikariDataSource数据源,这次整合一个第三方的数据源 Druid ,它是阿里开发的一款开源的数据源,被很多人认为是Java语言中最好的数据库连接池,因为 Druid 能够提供强大的一整套监控和扩展功能。
1、在创建SpringBoot 的项目,在maven中添加库依赖:
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-jdbc mysql mysql-connector-java runtime com.alibaba druid 1.1.11 log4j log4j 1.2.17
注意:druid 依赖 log4j 的日志jar包,但是 SpringBoot 默认使用的是 slf4j+logback,所以导入log4j的jar包即可。
2、在 application.yml(或aproperties)中添加相应的配置:
server: port: 80# 数据库连接信息spring: datasource: username: root password: 123456 url: jdbc:mysql://localhost:3306/my_springboot?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT driver-class-name: com.mysql.cj.jdbc.Driver # com.mysql.jdbc.Driver# 使用 Druid 数据源 type: com.alibaba.druid.pool.DruidDataSource
log4j.properties 配置文件:
log4j.rootLogger = debug,stdout, Dlog4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.Threshold = INFOlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d %p %m%nlog4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = ./log4j.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = DEBUGlog4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern=%d %p %m%n
4、在运行测试方法,查看数据源
public class SpringbootdemoApplicationTests { @Autowired private DataSource dataSource; @Autowired private JdbcTemplate jdbcTemplate; @Test public void contextLoads() throws SQLException { System.out.println("dataSource==" + dataSource.getClass()); Connection connection = dataSource.getConnection(); System.out.println("connection==" + connection); List
Druid 数据源 获取到,那么整合简单完成。
第三方的数据源 Druid ,SpirngBoot 默认利用反射的机制配置不能获取druid数据源的信息,需要我们自己做:
1、在全局配置文件中配上Druid 数据源自己的特性配置
1)application.yml
server: port: 80# Datasource# 数据源基本配置spring: datasource: username: root password: 123456 url: jdbc:mysql://localhost:3306/my_springboot?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT driver-class-name: com.mysql.cj.jdbc.Driver # com.mysql.jdbc.Driver# 使用 Druid 数据源 type: com.alibaba.druid.pool.DruidDataSource initialSize: 5 minIdle: 5 maxActive: 20 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 filters: stat,wall,log4j maxPoolPreparedStatementPerConnectionSize: 20 useGlobalDataSourceStat: true connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500# schema:# - classpath:department.sql2)application.properties
server.port=80 # Datasource# 数据源基本配置spring.datasource.url=jdbc:mysql://localhost:3306/my_springboot?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMTspring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # com.mysql.jdbc.Driver# 使用 Druid 数据源spring.datasource.type=com.alibaba.druid.pool.DruidDataSource # 数据源其他配置spring.datasource.initialSize=5spring.datasource.minIdle=5spring.datasource.maxActive=20spring.datasource.maxWait=60000spring.datasource.timeBetweenEvictionRunsMillis=60000spring.datasource.minEvictableIdleTimeMillis=300000spring.datasource.validationQuery=SELECT 1 FROM DUALspring.datasource.testWhileIdle=truespring.datasource.testOnBorrow=falsespring.datasource.testOnReturn=falsespring.datasource.poolPreparedStatements=true# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙spring.datasource.filters=stat,wall,log4jspring.datasource.maxPoolPreparedStatementPerConnectionSize=20spring.datasource.useGlobalDataSourceStat=true spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
2、创建配置类来注入数据源对象,并获取这些配置到数据源中
import com.alibaba.druid.pool.DruidDataSource;import com.alibaba.druid.support.http.StatViewServlet;import com.alibaba.druid.support.http.WebStatFilter;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.boot.web.servlet.ServletRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;import java.util.Arrays;import java.util.HashMap;import java.util.Map;@Configurationpublic class DruidConfig { // 配置绑定 @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource druid(){ return new DruidDataSource(); } // 配置 Druid 的监控 // 1、 配置一个管理后台的Servlet @Bean public ServletRegistrationBean statViewServlet(){ ServletRegistrationBean bean = new ServletRegistrationBean<>(new StatViewServlet()); MapinitParams = new HashMap<>(); initParams.put("loginUsername", "admin"); initParams.put("loginPassword", "123456"); initParams.put("allow", "127.0.0.1"); // 空字符串就是允许所有访问,生产环境可以指定ip地址// initParams.put("deny", "127.0.0.1"); // 指定拒绝某个ip地址访问 bean.setInitParameters(initParams); bean.setUrlMappings(Arrays.asList(new String[]{"/druid/*"})); return bean; } // 2、配置一个web监控的filter:来实现对整个web应用的所有访问请求进行过滤,从而实现对数据库的访问监控 @Bean public FilterRegistrationBean webStatFilter(){ FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new WebStatFilter()); // 有些不需要拦截的,所以要配置exclusions Map initParams = new HashMap<>(); initParams.put("exclusions","*.js,*.css,*.jpg,*.png,/druid/*"); bean.setInitParameters(initParams); bean.setUrlPatterns(Arrays.asList(new String[]{"/*"})); return bean; }}
3、创建一个Controller,检测下Druid 监控
@Controllerpublic class IndexController { @Autowired private JdbcTemplate jdbcTemplate; @ResponseBody @GetMapping("/index") public String index(Model model){ List
4、启动项目
访问 http://localhost/druid 体验强大的Druid!
访问 http://127.0.0.1/index, 查看下监控
ends ~
转载地址:http://jjcgn.baihongyu.com/