SpringBoot&整合Druid数据源

了解HikariDataSource

SpringBoot2.0版本以上默认使用HikariDataSource数据源。

HikariDataSource号称java Web当前速度最快的数据源,先比喻传统的C3P0、DBCP、Tomcat、jdbc等连接池更优秀。

DRUID简介

  • Druid是阿里开源平台上的一个数据库链接池体现,结合了C3P0、DBCP、PROXOOL等DB池优点,最重要的是加入了日志监控。
  • Druid可以很好的监控DB池连接和SQL的执行情况,比如我在什么时间执行了什么sql产生了什么效果,sql执行多少秒。
  • HikariDataSource和Druid都是当前java Web上最优秀的数据源,HikariDataSource速度快,Druid天然集成了监控功能。

整合Druid数据源

第一步我们要先将Druid的依赖导入到pom.xml文件中,这里我用的是最新版本的。

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.16</version>
</dependency>

使用Druid数据源的配置其实很简单,我们只需要在application.yaml文件中jdbc的配置下面,使用type切换到我们要使用的数据源即可。

#    指定数据源
type: com.alibaba.druid.pool.DruidDataSource

我们可以在测试代码中来测试一下,是否已经使用了Druid数据源。

@SpringBootTest
class Springboot06JdbcApplicationTests {
    @Autowired
    DataSource dataSource;
    @Test
    void contextLoads() throws SQLException {
        //查看默认的数据源   com.zaxxer.hikari.HikariDataSource
        System.out.println(dataSource.getClass());

        //获得数据库连接
        Connection connection = dataSource.getConnection();
        System.out.println(connection);

        //关闭
        connection.close();

    }

}

在这里插入图片描述

从输出结果中可以看出数据源已经从SpringBoot默认的Hikari数据源变成了Druid数据源,数据库的底层没有变化,数据库的底层是jdbc。

Druidy有一些自己的配置,SpringBoot默认是不注入这些属性值的,需要自己绑定。

#druid 数据源专有配置
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,stat:监控统计、log4j:日志记录、wall:防御sql注入
#如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority
#则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

log4j日志功能

我们想要使用Druid的日志功能,就需要在pom.xml文件中导入log4j的依赖

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

Druid自定义配置(后台监控配置)

首先我们在SpringBoot主程序同一路径上创建Config包,在Config包中创建一个类来实现自定义配置。

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class DruidConfig {
    //绑定application.yaml
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource dataSource(){
        //将自定义的容器DruidDataSource加载到容器中之后,就不用SpringBoot来创建了
        return new DruidDataSource();
    }
}

配置成功之后,我们来实现Druid一个比较高级的功能:后台监控。

public class DruidConfig {
    //绑定application.yaml
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource dataSource(){
        //将自定义的容器DruidDataSource加载到容器中之后,就不用SpringBoot来创建了
        return new DruidDataSource();
    }
    @Bean
    //后台监控
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");//  /druid/*路径
        //后台需要有人登录,账号吗,密码设置
        HashMap<String,String> initParameters = new HashMap<>();
        //增加配置
        //注意:登录key是固定形式,不可以修改
        initParameters.put("loginUsername","admin");
        initParameters.put("loginPassword","12345");

        //允许谁访问,就在写在allow后例如  initParameters.put("allow","localhost"):只允许主机访问
        initParameters.put("allow","");
        //禁止谁访问
        //initParameters.put("GAO","192.168.65.2");
        //设置初始化参数
        bean.setInitParameters(initParameters);
        return bean;


    }
}

运行之后这个后台监控功能会自动跳出一个登录页面,我们可根据自己设置的账号密码进行登录,登录后我们会进入到一个index.html页面。其中包含了数据源、sql监控等模块。

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值