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),在代碼中是通過(guò)注解配置的方式實(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è)面自然就打不開了。。。就沒(méi)有安全漏洞了,性能上其實(shí)hikari比druid也要好不少。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決SpringBoot集成Eureka導(dǎo)致返回結(jié)果由json變?yōu)閤ml的問(wèn)題
這篇文章主要介紹了解決SpringBoot集成Eureka導(dǎo)致返回結(jié)果由json變?yōu)閤ml的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
SpringBoot實(shí)現(xiàn)MD5加鹽算法的示例代碼
加鹽算法是一種用于增強(qiáng)密碼安全性的技術(shù),本文主要介紹了SpringBoot實(shí)現(xiàn)MD5加鹽算法的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03
Spring Boot定時(shí)任務(wù)的使用實(shí)例代碼
這篇文章主要介紹了Spring Boot定時(shí)任務(wù)的使用實(shí)例代碼,需要的朋友可以參考下2017-04-04
Spring內(nèi)置定時(shí)任務(wù)調(diào)度@Scheduled使用詳解
這篇文章主要介紹了Spring內(nèi)置定時(shí)任務(wù)調(diào)度@Scheduled使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
Java使用TCP實(shí)現(xiàn)數(shù)據(jù)傳輸實(shí)例詳解
這篇文章主要介紹了Java使用TCP實(shí)現(xiàn)數(shù)據(jù)傳輸實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06
詳解SpringBoot Mybatis如何對(duì)接多數(shù)據(jù)源
這篇文章主要為大家介紹了SpringBoot Mybatis如何對(duì)接多數(shù)據(jù)源實(shí)現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
Java案例使用比較排序器comparator實(shí)現(xiàn)成績(jī)排序
這篇文章主要介紹了Java案例使用比較排序器comparator實(shí)現(xiàn)成績(jī)排序,主要通過(guò)案例用TreeSet集合存儲(chǔ)多個(gè)學(xué)生信息,并遍歷該集合,要按照總分從高到低進(jìn)行排序,下文介紹需要的朋友可以參考一下2022-04-04

