1. 程式人生 > >HikariCP配置詳解+多資料來源

HikariCP配置詳解+多資料來源

                       

SpringBoot 2.0 開始推 HikariCP ,將預設的資料庫連線池從 tomcat jdbc pool 改為了 hikariHikariCP 在效能和併發方面確實表現不俗(號稱最快的連線池)。

如果你使用 spring-boot-starter-jdbcspring-boot-starter-data-jpa

,會自動新增對 HikariCP 的依賴,也就是說此時使用 HikariCP 。當然你也可以強制使用其它的連線池技術,可以通過在 application.propertiesapplication.yml 中配置 spring.datasource.type 指定。

  • 基本配置

    因為已經預設使用 HikariCP,所以只需要在 yaml 中新增資料庫配置即可:

    url: jdbc:mysql://localhost:3306?useSSL=falseusername: rootpassword: 1234
         
    • 1
    • 2
    • 3
  • HikariCP 預設配置

    主要引數是在 com.zaxxer.hikari.HikariConfig 中初始化的,部分引數是在 com.zaxxer.hikari.pool.PoolBase 中初始化的。

                                                                                                                                                                                                                                                                       
    name 描述 構造器預設值 預設配置validate之後的值 validate重置
    autoCommit 自動提交從池中返回的連線 true true -
    connectionTimeout 等待來自池的連線的最大毫秒數 SECONDS.toMillis(30) = 30000 30000 如果小於250毫秒,則被重置回30秒
    idleTimeout 連線允許在池中閒置的最長時間 MINUTES.toMillis(10) = 600000 600000 如果idleTimeout+1秒>maxLifetime 且 maxLifetime>0,則會被重置為0(代表永遠不會退出);如果idleTimeout!=0且小於10秒,則會被重置為10秒
    maxLifetime 池中連線最長生命週期 MINUTES.toMillis(30) = 1800000 1800000 如果不等於0且小於30秒則會被重置回30分鐘
    connectionTestQuery 如果您的驅動程式支援JDBC4,我們強烈建議您不要設定此屬性 null null -
    minimumIdle 池中維護的最小空閒連線數 -1 10 minIdle<0或者minIdle>maxPoolSize,則被重置為maxPoolSize
    maximumPoolSize 池中最大連線數,包括閒置和使用中的連線 -1 10 如果maxPoolSize小於1,則會被重置。當minIdle<=0被重置為DEFAULT_POOL_SIZE則為10;如果minIdle>0則重置為minIdle的值
    metricRegistry 該屬性允許您指定一個 Codahale / Dropwizard MetricRegistry 的例項,供池使用以記錄各種指標 null null -
    healthCheckRegistry 該屬性允許您指定池使用的Codahale / Dropwizard HealthCheckRegistry的例項來報告當前健康資訊 null null -
    poolName 連線池的使用者定義名稱,主要出現在日誌記錄和JMX管理控制檯中以識別池和池配置 null HikariPool-1 -
    initializationFailTimeout 如果池無法成功初始化連線,則此屬性控制池是否將 fail fast 1 1 -
    isolateInternalQueries 是否在其自己的事務中隔離內部池查詢,例如連線活動測試 false false -
    allowPoolSuspension 控制池是否可以通過JMX暫停和恢復 false false -
    readOnly 從池中獲取的連線是否預設處於只讀模式 false false -
    registerMbeans 是否註冊JMX管理Bean(MBeans false false -
    catalog 為支援 catalog 概念的資料庫設定預設 catalog driver default null -
    connectionInitSql 該屬性設定一個SQL語句,在將每個新連線建立後,將其新增到池中之前執行該語句。 null null -
    driverClassName HikariCP將嘗試通過僅基於jdbcUrl的DriverManager解析驅動程式,但對於一些較舊的驅動程式,還必須指定driverClassName null null -
    transactionIsolation 控制從池返回的連線的預設事務隔離級別 null null -
    validationTimeout 連線將被測試活動的最大時間量 SECONDS.toMillis(5) = 5000 5000 如果小於250毫秒,則會被重置回5秒
    leakDetectionThreshold 記錄訊息之前連線可能離開池的時間量,表示可能的連線洩漏 0 0 如果大於0且不是單元測試,則進一步判斷:(leakDetectionThreshold < SECONDS.toMillis(2) or (leakDetectionThreshold > maxLifetime && maxLifetime > 0),會被重置為0 . 即如果要生效則必須>0,而且不能小於2秒,而且當maxLifetime > 0時不能大於maxLifetime
    dataSource 這個屬性允許你直接設定資料來源的例項被池包裝,而不是讓HikariCP通過反射來構造它 null null -
    schema 該屬性為支援模式概念的資料庫設定預設模式 driver default null -
    threadFactory 此屬性允許您設定將用於建立池使用的所有執行緒的java.util.concurrent.ThreadFactory的例項。 null null -
    scheduledExecutor 此屬性允許您設定將用於各種內部計劃任務的java.util.concurrent.ScheduledExecutorService例項 null null -
  • HikariCP 配置多資料來源

    application.yml :

    hikari:    primary:        jdbc-url: jdbc:mysql://localhost:3306/xu?useSSL=false        username: root        password: 1234    second:        jdbc-url: jdbc:mysql://localhost:3306/hua?useSSL=false        username: root        password: 1234
         
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    PrimaryDatasourceConfig:

    @Configuration@MapperScan(basePackages = PrimaryDatasourceConfig.PACKAGE,sqlSessionFactoryRef = "primarySqlSessionFactory")public class PrimaryDatasourceConfig {    static final String PACKAGE = "com.xu.scaffold.repository.primary";    @Bean(name = "primaryDataSource")    @Primary    @ConfigurationProperties(prefix = "hikari.primary")    public HikariDataSource dataSource() {        return new HikariDataSource();    }    @Bean(name = "primaryTransactionManager")    @Primary    public DataSourceTransactionManager transactionManager() {        return new DataSourceTransactionManager(this.dataSource());    }    @Bean(name = "primarySqlSessionFactory")    @Primary    public SqlSessionFactory sqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception {        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();        sessionFactory.setDataSource(dataSource);        sessionFactory.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);        return sessionFactory.getObject();    }}
         
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    SecondDatasourceConfig:

    @Configuration@MapperScan(basePackages = SecondDatasourceConfig.PACKAGE, sqlSessionFactoryRef = "secondSqlSessionFactory")public class SecondDatasourceConfig {    static final String PACKAGE = "com.xu.scaffold.repository.second";    @Bean(name = "secondDataSource")    @ConfigurationProperties(prefix = "hikari.second")    public HikariDataSource dataSource() {        return new HikariDataSource();    }    @Bean(name = "secondTransactionManager")    public DataSourceTransactionManager transactionManager() {        return new DataSourceTransactionManager(this.dataSource());    }    @Bean(name = "secondSqlSessionFactory")    public SqlSessionFactory sqlSessionFactory(@Qualifier("secondDataSource") DataSource dataSource) throws Exception {        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();        sessionFactory.setDataSource(dataSource);        sessionFactory.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);        return sessionFactory.getObject();    }}
         
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 參考文章

           

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!希望你也加入到我們人工智慧的隊伍中來!http://www.captainbed.net

這裡寫圖片描述