Spring Boot中使用Druid替换MyBatis数据库连接池

介绍

Druid是阿里使用的数据库连接池,被阿里推崇为Java最好的数据库连接池。不仅可以承担数据库的连接访问工作,还可以提供强大的监控和扩展功能。

集成到Spring Boot

pom.xml

添加依赖

<dependency>
	<groupId>com.alibabagroupId>
	<artifactId>druidartifactId>
	<version>1.1.21version>
dependency>

其版本可以查看官方Maven仓库:

https://mvnrepository.com/artifact/com.alibaba/druid

这里使用的是Druid的官方Maven依赖。若是使用druid-spring-boot,则后续的配置会简单一些。但druid-spring-boot截止到目前已经有两年没有更新,最后的版本截止到1.1.10。

配置文件

通常将配置写入到yml/properties文件中。这里以properties文件为例。
Druid的配置可以添加到默认的application.properties文件中,也可以添加到自定义的properties文件中。在resources文件夹下新建一个config文件夹,创建一个druid.properties文件,写入Druid数据库连接池配置:

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url = jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

这里仅仅配置了其中最基础的几项内容。详细配置可以参考官方文档:

https://github.com/alibaba/druid

MyBatis配置类

修改MyBatis的配置类,令其读取druid.properties并使用Durid的数据源。

@Configuration
@MapperScan(basePackages = "com.template.dao", sqlSessionTemplateRef = "sqlSessionTemplate")
@PropertySource(value = {"classpath:config/druid.properties"},ignoreResourceNotFound = false, encoding = "UTF-8", name = "druid.properties")
public class DataSource1Config {

    @Bean(name = "dataSource")
    @ConfigurationProperties(prefix = "spring.datasource")
    @Primary
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }

    @Bean(name = "sqlSessionFactory")
    @Primary
    public SqlSessionFactory dbSqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }

    @Bean(name = "transactionManager")
    @Primary
    public DataSourceTransactionManager dbTransactionManager(@Qualifier("dataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "sqlSessionTemplate")
    @Primary
    public SqlSessionTemplate dbSqlSessionTemplate(@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

    /**
     * 过滤
     */
    @Bean
    public FilterRegistrationBean druidStatFilter() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        // 过滤规则
        filterRegistrationBean.addUrlPatterns("/*");
        // 需要忽略的内容
        filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif, *.jpg,*.png, *.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }

    /**
     * 注册DruidServlet
     * 若使用druid-spring-boot依赖,则不需要该注册
     */
    @Bean
    public ServletRegistrationBean druidServletRegistrationBean() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
        servletRegistrationBean.setServlet(new StatViewServlet());
        servletRegistrationBean.addUrlMappings("/druid/*");
        return servletRegistrationBean;
    }
}

相比于MyBatis的原始配置,有3处需要更改:

  1. dataSource的返回类需要使用DruidDataSource
  2. 添加了druidStatFilter来进行过滤。
  3. 添加了druidServletRegistrationBean来注册DruidServlet。若是使用了druid-spring-boot依赖,则不需要该注册。

访问

直接访问服务端地址,加上druid路径即可:

http://127.0.0.1:9100/druid/

Druid内置的index.html会打开,显示所有统计数据。

你可能感兴趣的:(Java,Spring-Boot)