您当前的位置: 首页 >  ui

Charge8

暂无认证

  • 2浏览

    0关注

    447博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

SpringBoot 整合Druid数据源

Charge8 发布时间:2019-05-28 11:59:47 ,浏览量:2

   

    Druid 官方参考文档,进行学习

    DruidDataSource配置

一、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, D
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.Threshold = INFO
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p %m%n
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ./log4j.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 %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=GMT
spring.datasource.username=root
spring.datasource.password=123456
spring.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=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
spring.datasource.maxWait=60000
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
#   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
spring.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;

@Configuration
public 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 监控

@Controller
public 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 ~

关注
打赏
1664721914
查看更多评论
立即登录/注册

微信扫码登录

0.0570s