Spring Boot中使用Druid替換MyBatis數據庫連接池

介紹

Druid是阿里使用的數據庫連接池,被阿里推崇爲Java最好的數據庫連接池。不僅可以承擔數據庫的連接訪問工作,還可以提供強大的監控和擴展功能。

集成到Spring Boot

pom.xml

添加依賴

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid</artifactId>
	<version>1.1.21</version>
</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會打開,顯示所有統計數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章