springboot配置Druid數據源

springboot整合篇css


前言java


對於數據訪問層,不管是Sql仍是NoSql,SpringBoot默認採用整合SpringData的方式進行統一管理,添加大量的自動配置,屏蔽了不少設置。引入了各類XxxTemplate和XxxRepository來簡化咱們隊數據訪問層的操做。mysql


springboot2.0默認是用com.zaxxer.hikari.HikariDataSource做爲數據源。git


2.0如下默認採用的是org.apache.tomcat.jdbc.pool.DataSource做爲數據源。github


Hikari的官方網站:http://brettwooldridge.github.io/HikariCP/spring


Hikari號稱JAVA領域中最快的數據鏈接池,你可去點鏈接進去看看,第一行就是說他本身多麼厲害,秒殺什麼什麼的,不過再快我也以爲沒有阿里巴巴奉獻給apache的Druid好,由於阿里巴巴的服務周到,裏面有監控中心,能夠幫助咱們快速定位慢sql等。sql


Druid官方網站:http://druid.io/數據庫


爲何HikariCP被號稱爲性能最好的Java數據庫鏈接池,如何配置使用參考這篇博客:點擊apache


注意事項:默認狀況下使用com.zaxxer.hikari.HikariDataSource獲取數據源時會拋出一個異常。說時區不對,須要咱們修改mysql的時區:tomcat


SHOW VARIABLES LIKE '%time_zone%'

SET GLOBAL time_zone="+8:00"

使用Druid數據源


Apache Druid(Incubating) - 面向列的分佈式數據存儲,很是適合爲交互式應用程序提供動力


雖然HikariDataSource性能很是高,可是阿里的druid數據源配有成套的數據源管理軟件,開發中使用的更多。


以往咱們都是直接引入Druid的依賴:


<dependency>

    <groupId>com.alibaba</groupId>

    <artifactId>druid</artifactId>

    <version>1.1.12</version>

</dependency>

可是面對這麼火爆的springboot並無直接對Druid的啓動器而是須要咱們本身整合,apache中4個月前已經出了一套完美支持springboot的方案因此說咱們不使用上面的依賴而是使用:


×××:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter


<dependency>

   <groupId>com.alibaba</groupId>

   <artifactId>druid-spring-boot-starter</artifactId>

   <version>1.1.10</version>

</dependency>

配置YML文件,具體的參數配置能夠去官網看看:


spring:

  datasource:

#   數據源基本配置

    username: root

    password: root

    driver-class-name: com.mysql.jdbc.Driver

    url: jdbc:mysql://localhost:3306/duid

    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

#   配置監控統計攔截的filters,去掉後監控界面sql沒法統計,'wall'用於防火牆  

    filters: stat,wall

    maxPoolPreparedStatementPerConnectionSize: 20

    useGlobalDataSourceStat: true  

    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

雖然咱們配置了druid鏈接池的其它屬性,可是不會生效。由於默認是使用的java.sql.Datasource的類來獲取屬性的,有些屬性datasource沒有。若是咱們想讓配置生效,須要手動建立Druid的配置文件。


@ConfigurationProperties(prefix = "spring.datasource")

@Bean

public DruidDataSource druidDataSource(){

      return new DruidDataSource();

}

Druid的最強大之處在於它有着強大的監控,能夠監控咱們發送到數據庫的全部sql語句。方便咱們後期排插錯誤。


咱們接着在DruidDataSource裏面配置監控中心:


 /**

     * 配置監控服務器

     * @return 返回監控註冊的servlet對象

     * @author SimpleWu

     */

    @Bean

    public ServletRegistrationBean statViewServlet() {

        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");

        // 添加IP白名單

        servletRegistrationBean.addInitParameter("allow", "127.0.0.1");

        // 添加IP黑名單,當白名單和黑名單重複時,黑名單優先級更高

        servletRegistrationBean.addInitParameter("deny", "127.0.0.1");

        // 添加控制檯管理用戶

        servletRegistrationBean.addInitParameter("loginUsername", "SimpleWu");

        servletRegistrationBean.addInitParameter("loginPassword", "123456");

        // 是否可以重置數據

        servletRegistrationBean.addInitParameter("resetEnable", "false");

        return servletRegistrationBean;

    }

 

    /**

     * 配置服務過濾器

     *

     * @return 返回過濾器配置對象

     */

    @Bean

    public FilterRegistrationBean statFilter() {

        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());

        // 添加過濾規則

        filterRegistrationBean.addUrlPatterns("/*");

        // 忽略過濾格式

        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*,");

        return filterRegistrationBean;

    }

相關文章
相關標籤/搜索