博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot 整合Druid数据源
阅读量:3931 次
发布时间:2019-05-23

本文共 6923 字,大约阅读时间需要 23 分钟。

   

   

    

一、SpringBoot 整合Druid

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
> maps = jdbcTemplate.queryForList("select * from t_user"); System.out.println(maps); }}

    

Druid 数据源 获取到,那么整合简单完成。

 

二、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.sql

2)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());        Map
initParams = 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
> maps = jdbcTemplate.queryForList("select * from t_user"); return maps.toString(); }}

4、启动项目

     访问 http://localhost/druid 体验强大的Druid!

     

     访问 http://127.0.0.1/index, 查看下监控

      

       

 

ends ~

转载地址:http://jjcgn.baihongyu.com/

你可能感兴趣的文章
收益的预测和评估
查看>>
项目论证
查看>>
项目评估
查看>>
回溯法
查看>>
分支限界法
查看>>
随机化算法
查看>>
项目整体管理(一)
查看>>
项目整体管理(二)
查看>>
推荐阅读书籍
查看>>
项目管理范围概论
查看>>
项目范围定义与创建工作结构分解
查看>>
范围确认和范围控制
查看>>
项目时间管理
查看>>
项目时间管理(续)
查看>>
项目成本管理
查看>>
项目质量管理
查看>>
项目人力资源管理
查看>>
项目沟通管理
查看>>
项目风险管理
查看>>
项目采购管理
查看>>