Druid 的整合 springboot mybaits

建立 SpringBoot 項目css

       在整合 Druid 以前,須要先建立一個 SpringBoot 和 MyBatis 的項目,先來觀察一下,它默認是否使用了數據庫鏈接池,使用了什麼數據庫鏈接池。而後,再來整合 Druid 這款數據庫鏈接池到項目當中。html

       建立 SpringBoot 和 Mybatis 的項目很簡單,經過嚮導便可完成( 完整項目項目www.fhadmin.org)。建立項目後的依賴以下:java

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.3</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
    </exclusions>
</dependency>

       其中的依賴不多,添加了 SpringMVC、Mybatis 和 MySQL。有了依賴以後,添加數據庫的配置,不然項目沒法啓動。數據庫的配置以下:mysql

spring:
    datasource:
        url: jdbc:mysql://192.168.0.106:3306/scms?serverTimezone=UTC
        username: root
        password:

       有了上面的配置,項目就能夠啓動了,不過整個項目沒有任何功能啓動也無心義。所以來寫一個簡單的單元測試,代碼以下:web

//www.fhadmin.org
@Autowired
DataSource dataSource;

@Test
void contextLoads() throws SQLException
{
    System.out.println(dataSource.getClass());
    Connection connection = dataSource.getConnection();
    System.out.println(connection);
}

       有了單元測試以後,直接運行單元測試的代碼,輸出結果以下:
class com.zaxxer.hikari.HikariDataSource
2020-10-02 11:17:41.279  INFO 25817 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-10-02 11:17:41.457  INFO 25817 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
HikariProxyConnection@1405548909 wrapping com.mysql.cj.jdbc.ConnectionImpl@435cc7f9
2020-10-02 11:17:41.472  INFO 25817 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2020-10-02 11:17:41.482  INFO 25817 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

       能夠看到,雖然在項目中沒有整合任何的數據庫鏈接池,可是 Spring 默認整合了 Hikari 這個數據庫鏈接池。可是,咱們想要使用的是 Druid,那麼該如何作?spring


整合 Druidsql

        整合 Druid 的方法也比較簡單的,引入 Druid 的相關依賴,並修改數據庫的配置便可。依賴以下:數據庫

<!-- https://mvnrepository.com/artifact/com.alibaba/druid 完整項目項目www.fhadmin.org -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.24</version>
</dependency>

       修改數據庫的配置只須要增長一行配置便可,配置以下:mybatis

spring:
    datasource:
        url: jdbc:mysql://192.168.0.106:3306/scms?serverTimezone=UTC
        username: root
        password:
        type: com.alibaba.druid.pool.DruidDataSource

       比較前面的配置,咱們的配置增長了一行配置,而後咱們接着運行前面的單元測試代碼。輸出以下:app

class com.alibaba.druid.pool.DruidDataSource
2020-10-02 12:01:18.784  INFO 26316 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
com.mysql.cj.jdbc.ConnectionImpl@3f0d6038
2020-10-02 12:01:18.920  INFO 26316 --- [extShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} closing ...
2020-10-02 12:01:18.921  INFO 26316 --- [extShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} closed
2020-10-02 12:01:18.922  INFO 26316 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'

        能夠看到,數據庫鏈接池已經變成了 alibaba 的 Druid 了。

       固然了,這不能算完,由於數據庫鏈接池仍是有不少配置的,咱們添加一些配置,配置以下:

spring:
    datasource:
        url: jdbc:mysql://192.168.0.106:3306/scms?serverTimezone=UTC
        username: root
        password:
        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

        上面的配置對 Druid 進行相關的配置,可是添加上配置是否能生效,修改咱們的單元測試代碼並運行,單元測試代碼修改以下:

DruidDataSource druidDataSource = (DruidDataSource)dataSource;
System.out.println("initialSize: " + druidDataSource.getInitialSize());
System.out.println("maxActive: " + druidDataSource.getMaxActive());

       運行修改後的單元測試,查看輸出:

initialSize: 0
maxActive: 8

       能夠看到,並無按照咱們的預期進行輸出,由於配置並無被讀取。咱們須要可以將修改的配置進行讀取。

讀取數據庫鏈接池配置

        想要使用數據庫鏈接池的配置,那麼就須要定義一個讀取配置的類,並從新實例化一個 DataSource 類。代碼以下:

//完整項目項目fhadmin.org
@Configuration
public class DruidConfig
{
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }
}

       再次運行單元測試,查看輸出:
initialSize: 5
maxActive: 20

        能夠看到,如今的輸出結果已經和配置相同了。

配置監控

        在前面已經提到過,Druid 有強大的監控功能,可是須要咱們進行簡單的代碼編寫才能夠進行查看具體的監控,代碼以下;

@Bean
public ServletRegistrationBean druidServletRegistrationBean()
{
    ServletRegistrationBean<Servlet> servletServletRegistrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");;
    Map<String, String> initParam = new HashMap<>();
    //後臺容許誰能夠訪問
    initParam.put("loginUsername", "admin");
    initParam.put("loginPassword", "123456");
    initParam.put("allow", "");
    servletServletRegistrationBean.setInitParameters(initParam);

    return servletServletRegistrationBean;
}

// 配置 Druid 監控 之  web 監控的 filter
// WebStatFilter:用於配置Web和Druid數據源之間的管理關聯監控統計
@Bean
public FilterRegistrationBean webStatFilter() {
    FilterRegistrationBean bean = new FilterRegistrationBean();
    bean.setFilter(new WebStatFilter());

    Map<String, String> initParams = new HashMap<>();
    initParams.put("exclusions", "*.js,*.css,/druid/*");
    bean.setInitParameters(initParams);

    //"/*" 表示過濾全部請求
    bean.setUrlPatterns(Arrays.asList("/*"));
    return bean;
}


       啓動項目,而後訪問 localhost:8080/druid/ 就會進入 Druid 的監控界面

相關文章
相關標籤/搜索