springboot整合Druid

springboot整合Druid

工具:

  • idea21.6版
  • spring boot2.7
  • MySQL8.5

第一步:注入druid依赖

两种方式:单独注入druid依赖或者注入druid的stater包。两者均可

 	    
 	    <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.16</version>
        </dependency>

第二步:设置datasource

在springboot的yaml配置文件中添加datasource注册驱动、地址、账号密码等。
注意:需要切换成druid的数据源,因为Spring Boot 2.0 以上默认使用 com.zaxxer.hikari.HikariDataSource 数据源,但可以通过 spring.datasource.type 指定成druid数据源。

spring:
  datasource:
  	#数据库地址
    url: jdbc:mysql://localhost:3306/school?
    useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=ShangHai
    #注册驱动
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root
    #设置type为durid连接池的数据源
    type: com.alibaba.druid.pool.DruidDataSource
    #数据源其他配置
    druid:
      #配置初始化大小、最小、最大线程数
      initialSize: 5
      minIdle: 5
      #CPU核数+1,也可以大些但不要超过20,数据库加锁时连接过多性能下降
      maxActive: 20
      #最大等待时间,内网:800,外网:1200(三次握手1s)
      maxWait: 60000
      timeBetweenEvictionRunsMillis: 60000
      #配置一个连接在池中最大空间时间,单位是毫秒
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1
      testWhileIdle: true
      #设置从连接池获取连接时是否检查连接有效性,true检查,false不检查
      testOnBorrow: true
      #设置从连接池归还连接时是否检查连接有效性,true检查,false不检查
      testOnReturn: true
      #可以支持PSCache(提升写入、查询效率)
      poolPreparedStatements: true
      #配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      filters: stat,wall,log4j
      #保持长连接
      keepAlive: true
      maxPoolPreparedStatementPerConnectionSize: 20
      useGlobalDataSourceStat: true
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
测试

在test包下写测试,注入DataSource并打印出来,发现已经转换成了DruidDataSource说明转换成功。

@SpringBootTest(classes = TeamBootApplication.class)
public class JdbcTest {
    @Autowired
    DataSource dataSource;//dataSource标红但可正常运行
    @Test
    void JdbcTest1(){
        System.out.println(dataSource.getClass().toString());
    }
}

第三步:编写DruidDataSource配置类

虽然我们已经指定了Druid的数据源,
但是还需要将将全局配置文件中的参数绑定到DruidDataSource并添加到容器。
所以我们需要关闭springboot的数据源自动装配,修改成Druid的数据源并配置相关功能。
分为如下几步:
1: 启动类关闭数据源的自动装配
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
2: 编写druid的配置类
@Configuration
public class DruidConfig {
    @Bean
    /**
    *将自定义的 Druid数据源添加到容器中,不再让 Spring Boot 自动创建,
    *绑定全局配置文件中的 druid 数据源属性到 com.alibaba.druid.pool.DruidDataSource
    *从而让它们生效。
    *@ConfigurationProperties(prefix = "spring.datasource"):
    *作用就是将 全局配置文件中 前缀为 spring.datasource的属性值注入到 	
    *com.alibaba.druid.pool.DruidDataSource 的同名参数中
	**/
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource DruidDataSource(){
        return new DruidDataSource();
    }
}

到这一步druid的配置属性才生效,可在测试类中dataSource.getInitialSize()查看

3: 在druid的配置类中添加数据源监控filter过滤器
  • Druid 数据源具有监控的功能,并提供了一个 web 界面方便用户查看,类似安装 路由器 时,人家也提供了一个默认的 web 页面。
    所以需要设置 Druid 的后台管理页面,比如 登录账号、密码 等;配置后台管理;

  • filter过滤器用于配置Web和Druid数据源之间的管理关联监控统计;

//配置 Druid 监控管理后台的Servlet;
//内置 Servlet 容器时没有web.xml文件,所以使用 Spring Boot 的注册 Servlet 方式
@Bean
public ServletRegistrationBean statViewServlet() { 
   
    ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");

    // 这些参数可以在 com.alibaba.druid.support.http.StatViewServlet 
    // 的父类 com.alibaba.druid.support.http.ResourceServlet 中找到
    Map<String, String> initParams = new HashMap<>();
    initParams.put("loginUsername", "admin"); //后台管理界面的登录账号,名字固定
    initParams.put("loginPassword", "123456"); //后台管理界面的登录密码,名字固定

    //后台允许谁可以访问
    //initParams.put("allow", "localhost"):表示只有本机可以访问
    //initParams.put("allow", ""):为空或者为null时,表示允许所有访问
    initParams.put("allow", "");
    //deny:Druid 后台拒绝谁访问
    //initParams.put("kuangshen", "192.168.1.20");表示禁止此ip访问

    //设置初始化参数
    bean.setInitParameters(initParams);
    return bean;
}

在浏览器输入http://localhost:8080/druid/login.html进入druid监控登录界面,若点击登录没有反应,查看控制台,大概率是参数 k 错误

//配置 Druid 监控 之 web 监控的 filter
//WebStatFilter:用于配置Web和Druid数据源之间的管理关联监控统计
@Bean
public FilterRegistrationBean webStatFilter() { 
   
    FilterRegistrationBean bean = new FilterRegistrationBean();
    bean.setFilter(new WebStatFilter());

    //exclusions:设置哪些请求进行过滤排除掉,从而不进行统计
    Map<String, String> initParams = new HashMap<>();
    initParams.put("exclusions", "*.js,*.css,/druid/*,/jdbc/*");
    bean.setInitParameters(initParams);

    //"/*" 表示过滤所有请求
    bean.setUrlPatterns(Arrays.asList("/*"));
    return bean;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值