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表示無限生命周期,默認(rèn)1800000即30分鐘 max-lifetime: 540000 # 數(shù)據(jù)庫連接超時(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表示無限生命周期,默認(rèn)1800000即30分鐘 max-lifetime: 540000 # 數(shù)據(jù)庫連接超時(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ù)庫url在druid中是url,不管是不是多個(gè)數(shù)據(jù)源,但是在hikari中,如果是單個(gè)數(shù)據(jù)源則是url,多個(gè)數(shù)據(jù)源則要寫成jdbc-url。
另外就是數(shù)據(jù)庫連接,用戶名和密碼放的位置不太一樣。。
步驟三
由于我是讀寫兩個(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)控頁面自然就打不開了。。。就沒有安全漏洞了,性能上其實(shí)hikari比druid也要好不少。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決SpringBoot集成Eureka導(dǎo)致返回結(jié)果由json變?yōu)閤ml的問題
這篇文章主要介紹了解決SpringBoot集成Eureka導(dǎo)致返回結(jié)果由json變?yōu)閤ml的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07SpringBoot實(shí)現(xiàn)MD5加鹽算法的示例代碼
加鹽算法是一種用于增強(qiáng)密碼安全性的技術(shù),本文主要介紹了SpringBoot實(shí)現(xiàn)MD5加鹽算法的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03Spring Boot定時(shí)任務(wù)的使用實(shí)例代碼
這篇文章主要介紹了Spring Boot定時(shí)任務(wù)的使用實(shí)例代碼,需要的朋友可以參考下2017-04-04Spring內(nèi)置定時(shí)任務(wù)調(diào)度@Scheduled使用詳解
這篇文章主要介紹了Spring內(nèi)置定時(shí)任務(wù)調(diào)度@Scheduled使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12Java使用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-09Java案例使用比較排序器comparator實(shí)現(xiàn)成績(jī)排序
這篇文章主要介紹了Java案例使用比較排序器comparator實(shí)現(xiàn)成績(jī)排序,主要通過案例用TreeSet集合存儲(chǔ)多個(gè)學(xué)生信息,并遍歷該集合,要按照總分從高到低進(jìn)行排序,下文介紹需要的朋友可以參考一下2022-04-04