Druid如何平行替換為Hikari
Druid平行替換為Hikari
由于druid本身的漏洞,具體見我的上一篇文章druid漏洞,決定替換為hikari。
步驟一
將pom文件中引用的druid依賴刪除,我引用的是
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.9</version>
</dependency>步驟二
修改yml文件。
由于我用的是讀寫分離,所以yml文件寫成下邊的形式。
datasource:
x-wr:
driver-class-name: com.mysql.jdbc.Driver
name: mysql
type: com.zaxxer.hikari.HikariDataSource
jdbc-url: jdbc:mysql://
username: x_rw
password: 11111
hikari:
# 最小空閑連接數(shù)量
minimum-idle: 10
# 連接池最大連接數(shù),默認(rèn)是10
maximum-pool-size: 20
# 空閑連接存活最大時(shí)間,默認(rèn)600000(10分鐘)
idle-timeout: 5000000
# 此屬性控制池中連接的最長(zhǎng)生命周期,值0表示無(wú)限生命周期,默認(rèn)1800000即30分鐘
max-lifetime: 540000
# 數(shù)據(jù)庫(kù)連接超時(shí)時(shí)間,默認(rèn)30秒,即30000
connection-timeout: 60000
connection-test-query: SELECT 1
#此屬性控制從池返回的連接的默認(rèn)自動(dòng)提交行為,默認(rèn)值:true
auto-commit: true
x-ro:
driver-class-name: com.mysql.jdbc.Driver
name: mysql
type: com.zaxxer.hikari.HikariDataSource
jdbc-url: jdbc:mysql://
username: x_ro
password: 000000
hikari:
# 最小空閑連接數(shù)量
minimum-idle: 10
# 連接池最大連接數(shù),默認(rèn)是10
maximum-pool-size: 20
# 空閑連接存活最大時(shí)間,默認(rèn)600000(10分鐘)
idle-timeout: 5000000
# 此屬性控制池中連接的最長(zhǎng)生命周期,值0表示無(wú)限生命周期,默認(rèn)1800000即30分鐘
max-lifetime: 540000
# 數(shù)據(jù)庫(kù)連接超時(shí)時(shí)間,默認(rèn)30秒,即30000
connection-timeout: 60000
connection-test-query: SELECT 1
#此屬性控制從池返回的連接的默認(rèn)自動(dòng)提交行為,默認(rèn)值:true
auto-commit: true注意幾個(gè)地方,首先druid的配置文件是driverClassName,這里是driver-class-name,同時(shí)數(shù)據(jù)庫(kù)url在druid中是url,不管是不是多個(gè)數(shù)據(jù)源,但是在hikari中,如果是單個(gè)數(shù)據(jù)源則是url,多個(gè)數(shù)據(jù)源則要寫成jdbc-url。
另外就是數(shù)據(jù)庫(kù)連接,用戶名和密碼放的位置不太一樣。。
步驟三
由于我是讀寫兩個(gè)賬號(hào),在代碼中是通過注解配置的方式實(shí)現(xiàn)不同數(shù)據(jù)源切換的,所以還需要改一下配置文件。
@Configuration
@MapperScan(basePackages = "com.dao", sqlSessionFactoryRef = DataSourceConfig.SQL_SESSION_FACTORY_NAME)
public class DataSourceConfig {
public static final String SQL_SESSION_FACTORY_NAME = "xxxFactory";
@Bean
@ConfigurationProperties("spring.datasource.x-wr")
public DataSource dataSourcexMysqlRw() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties("spring.datasource.x-ro")
public DataSource dataSourcexMysqlRo() {
return DataSourceBuilder.create().build();
}
@Bean
@Primary
public AbstractRoutingDataSource dataSource() {
Map<Object, Object> targetDataSources = new HashMap<>(2);
targetDataSources.put(DataSourceConstant.mysql_x_rw, dataSourcexMysqlRw());
targetDataSources.put(DataSourceConstant.mysql_x_ro, dataSourcexMysqlRo());
return new DynamicDataSource(dataSourcexMysqlRw(), targetDataSources);
}
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean(name = DataSourceConfig.SQL_SESSION_FACTORY_NAME)
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
Objects.requireNonNull(sqlSessionFactoryBean.getObject()).getConfiguration().setMapUnderscoreToCamelCase(true);
return sqlSessionFactoryBean.getObject();
}
}前兩個(gè)bean之前是這么寫的
@Bean
@ConfigurationProperties("spring.datasource.x-wr.druid")
public DataSource dataSourcexMysqlRw() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties("spring.datasource.x-ro.druid")
public DataSource dataSourcexMysqlRo() {
return DruidDataSourceBuilder.create().build();
}注意區(qū)別。
這些地方改完之后,你其他的代碼是完全不需要?jiǎng)拥?,可以完美替換,druid的監(jiān)控頁(yè)面自然就打不開了。。。就沒有安全漏洞了,性能上其實(shí)hikari比druid也要好不少。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用SpringBoot-JPA進(jìn)行自定義保存及批量保存功能
這篇文章主要介紹了使用SpringBoot-JPA進(jìn)行自定義的保存及批量保存功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06
Netty進(jìn)階之EventExecutorGroup源碼詳解
這篇文章主要介紹了Netty進(jìn)階之EventExecutorGroup源碼詳解,EventExecutorGroup繼承了JDK的ScheduledExecutroService,那么它就擁有了執(zhí)行定時(shí)任務(wù),執(zhí)行提交的普通任務(wù),需要的朋友可以參考下2023-11-11
Java的web開發(fā)中SSH框架的協(xié)作處理應(yīng)用筆記
這篇文章主要介紹了Java的web開發(fā)中SSH框架的協(xié)作處理應(yīng)用筆記,SSH是指Struts和Spring以及Hibernate的框架搭配,需要的朋友可以參考下2015-12-12

