HikariCP配置詳解+多資料來源
阿新 • • 發佈:2018-11-21
SpringBoot 2.0
開始推 HikariCP
,將預設的資料庫連線池從 tomcat jdbc pool
改為了 hikari
, HikariCP
在效能和併發方面確實表現不俗(號稱最快的連線池)。
如果你使用 spring-boot-starter-jdbc
或 spring-boot-starter-data-jpa
HikariCP
的依賴,也就是說此時使用 HikariCP
。當然你也可以強制使用其它的連線池技術,可以通過在 application.properties
或 application.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