依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.9</version></dependency>
切换数据源
切换数据源;之前已经说过 Spring Boot 2.0 以上默认使用 com.zaxxer.hikari.HikariDataSource 数据源,但可以 通过 spring.datasource.type 指定数据源。
spring:datasource:username: rootpassword: 123456url: jdbc:mysql://localhost:3306/mybatisdb?useUnicode=true&characterEncoding=utf-8driver-class-name: com.mysql.jdbc.Driver#导入依赖过后,指定了type,用的就是druid的数据源type: com.alibaba.druid.pool.DruidDataSource
测试得到结果
@SpringBootTestclass SpringBoot2jdbcApplicationTests {@AutowiredDataSource dataSource;//数据源对象,自动装配@Testvoid contextLoads() throws SQLException {//现在输出的就是:class com.alibaba.druid.pool.DruidDataSourceSystem.out.println(dataSource.getClass());//获取数据库链接Connection connection =dataSource.getConnection();System.out.println(connection);//关闭connection.close();}}
设置参数
如上测试结果,既然切换druid成功,就可以设置数据源连接初始化大小、最大连接数、等待时间、最小连接数 等设置项;可以查看源码
spring:datasource:username: rootpassword: 123456url: jdbc:mysql://localhost:3306/mybatisdb?useUnicode=true&characterEncoding=utf-8driver-class-name: com.mysql.jdbc.Driver#导入依赖过后,指定了type,用的就是druid的数据源type: com.alibaba.druid.pool.DruidDataSource#springboot 默认不是不注入这些属性值的,需要自己绑定#druid 数据源专有配置initialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true#配置监控统计拦截的filters,stat:监控统计,log4j(需要导入依赖):日志记录,wall:防御sql注入filters: stat,wall,log4jmaxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
导入log4j依赖
<!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>
设置DruidConfig
现在需要程序员自己为 DruidDataSource 绑定全局配置文件中的参数,再添加到容器中,而不再使用 Spring Boot 的自动生成了;我们需要 自己添加 DruidDataSource 组件到容器中,并绑定属性;
就是不用SpringBoot自动默认创建的Datasource,显示指定DruidDatasource
package com.example.springboot2jdbc.config;import com.alibaba.druid.pool.DruidDataSource;import com.alibaba.druid.support.http.StatViewServlet;import org.apache.catalina.filters.WebdavFixFilter;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.HashMap;//设置druid的配置@Configurationpublic class DruidConfig {//把我们自定义的druid数据源加入到容器中,不让springboot自己去创建@ConfigurationProperties(prefix = "spring.datasource")@Beanpublic DataSource druidDataSource(){return new DruidDataSource();}}
测试DruidDatasource
测试发现换成了druid数据源了
@SpringBootTestclass SpringBoot2jdbcApplicationTests {@AutowiredDataSource dataSource;//数据源对象,自动装配@Testvoid contextLoads() throws SQLException {//现在输出的就是:class com.alibaba.druid.pool.DruidDataSourceSystem.out.println(dataSource.getClass());//获取数据库链接Connection connection =dataSource.getConnection();System.out.println(connection);DruidDataSource druidDataSource = (DruidDataSource) dataSource;System.out.println("druidDataSource 数据源最大连接数:" + druidDataSource.getMaxActive());System.out.println("druidDataSource 数据源初始化连接数:" + druidDataSource.getInitialSize());//关闭connection.close();}}
配置Druid数据源监控
Druid数据源具有监控的功能,并提供了一个 web 界面方便用户查看,类似安装 路由器 时,人家也提供了一个默认的 web 页面。
所以第一步需要设置 Druid 的后台管理页面,比如 登录账号、密码 等;配置后台管理;
package com.example.springboot2jdbc.config;import com.alibaba.druid.pool.DruidDataSource;import com.alibaba.druid.support.http.StatViewServlet;import org.apache.catalina.filters.WebdavFixFilter;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.HashMap;//设置druid的配置@Configurationpublic class DruidConfig {//把我们自定义的druid数据源加入到容器中,不让springboot自己去创建@ConfigurationProperties(prefix = "spring.datasource")@Beanpublic DataSource druidDataSource(){return new DruidDataSource();}//后台监控功能//因为springboot内置了servlet容器,所以没哦呦web.xml,就用ServletRegistrationBean相当于web来代替@Beanpublic ServletRegistrationBean statViewServlet(){ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");//后台需要有人登陆,账号密码配置HashMap<String,String> initParameters =new HashMap<>();//增加配置initParameters.put("loginUsername","admin");//登陆的key是固定的,loginUsername LoginPasswordinitParameters.put("loginPassword","123456");//允许谁可以访问initParameters.put("allow","");//为空表示所有人都可以访问,写localhost表示只有本地可以访问,也可以指定某个人访问//禁止谁能访问initParameters.put("deny","192.168.10.132");bean.setInitParameters(initParameters);//设置初始化参数return bean;}//过滤的功能@Beanpublic FilterRegistrationBean webStatFilter(){FilterRegistrationBean bean =new FilterRegistrationBean();bean.setFilter(new WebdavFixFilter());//可以过滤哪些请求?HashMap<String,String> initParameters =new HashMap<>();//这些东西不进行统计initParameters.put("exclusions","*.js,*.css,/druid/*");bean.setInitParameters(initParameters);return bean;}}
查看Druid后台
访问http://localhost:8080/druid/index.html

(*) property for user to setup说明数据库还没有连接过,连接一下就有内容了

