SpringBoot使用Nacos動(dòng)態(tài)配置數(shù)據(jù)源的方法
SpringBoot/SpringCloud項(xiàng)目部署運(yùn)行后,如果使用硬編碼方式定義數(shù)據(jù)源,那么如果需要更換數(shù)據(jù)庫,就只能通過更改源碼并重啟的方式來達(dá)成目的
而SpringCloud生態(tài)中有配置中心這一組件,我們可以將數(shù)據(jù)源連接屬性編寫在配置中心中,需要修改連接屬性就可以從配置中心中修改并發(fā)布,這樣就可以熱修改數(shù)據(jù)源位置無需重啟服務(wù)
那么下面實(shí)戰(zhàn)說明如何將使用Nacos配置/注冊中心配置數(shù)據(jù)源(請注意看我寫的注釋來避坑)
首先說明版本
- SpringBoot 2.2.0.RELEASE
- Druid 1.1.22 (再重寫的時(shí)候類會(huì)隨著版本的不同而不同)
- MySQL 8.0.18
- Nacos 1.3.1(Nacos版本不對很可能會(huì)踩坑)
- IDEA 2020.3.2
- MyBatis 2.1.4(沒用上,但若使用并不沖突)
文章較長,但大多都是復(fù)制粘貼操作,先在這里說明整個(gè)配置的步驟
- 創(chuàng)建SpringBoot項(xiàng)目并引入依賴(直接復(fù)制粘貼)
- 創(chuàng)建bootstrap.yml文件(直接復(fù)制粘貼)
- 創(chuàng)建配置類(直接復(fù)制粘貼)
- 重寫Druid的DruidAbstractDataSource類(這個(gè)需要根據(jù)版本來修改)
- 在Nacos配置中心中新建配置
完成配置后的項(xiàng)目目錄
請注意:我默認(rèn)讀者會(huì)使用IDEA創(chuàng)建SpringBoot項(xiàng)目,并且可以自己安裝Nacos
1.maven依賴
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.1.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.22</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> <scope>provided</scope> <version>1.18.12</version> </dependency> </dependencies>
2.bootstrap.yml(這個(gè)優(yōu)先級(jí)高于propertie文件,用于配置Nacos)
如果需要區(qū)分生產(chǎn)環(huán)境或?qū)acos持久化至MySQL請自行學(xué)習(xí)Nacos官方文檔
spring: application: #這個(gè)服務(wù)名稱與最下面的file-extension: properties合起來 #即questionBank.properties為Nacos配置文件的名稱 name: questionBank cloud: nacos: #注冊中心 discovery: # 是否啟用 enabled: true # nacos服務(wù)地址 server-addr: 127.0.0.1:8848 # 服務(wù)名 #service: ${spring.application.name} # 組名 group: DEFAULT # 權(quán)重 weight: 2 # 元數(shù)據(jù) metadata: auth: sty version: 1.0 # 日志名 log-name: ${spring.application.name} # 是否開啟watch watch: true # 多長時(shí)間從服務(wù)端拉取一次 watch-delay: 30000 # 集群名稱 cluster-name: DEFAULT # 是否開啟注冊,如果為false,不會(huì)將自身注冊上去 register-enabled: true # https secure: false #配置中心 config: server-addr: 127.0.0.1:8848 #個(gè)人比較喜歡用properties文件,yaml縮進(jìn)老出錯(cuò) file-extension: properties server: port: 8080
3.配置類:DruidConfiguration(叫啥名無所謂)
import com.alibaba.druid.pool.DruidDataSource; import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @Author:STY * @Description: 數(shù)據(jù)源獲取配置(配置中心) * @Date:2021/3/17 */ @Configuration @RefreshScope @Data public class DruidConfiguration { @Value("${spring.datasource.druid.url}") private String url; @Value("${spring.datasource.druid.username}") private String username; @Value("${spring.datasource.druid.password}") private String password; @Value("${spring.datasource.druid.url.driverClassName}") private String driverClassName; @Bean(name="datasource") @RefreshScope public DruidDataSource dataSource() { DruidDataSource datasource = new DruidDataSource(); System.out.println(url); datasource.setUrl(this.url); datasource.setUsername(username); datasource.setPassword(password); datasource.setDriverClassName(driverClassName); return datasource; } }
注意注意:@RefreshScope一定要加?。。。。。?!否則將無法自動(dòng)刷新從Nacos發(fā)布的新數(shù)據(jù),因?yàn)閘ombok比較好用所以@Data就直接用他的了
4.然后就是最重要的一步(這個(gè)視Druid版本來修改)
重申一下我用的Druid版本為1.1.22
重寫com.alibaba.druid.pool.DruidAbstractDataSource類
由于Druid只允許初始化一次,所以只能修改他的源碼,而版本不同會(huì)導(dǎo)致該類并不相同,在修改源碼時(shí)必須尤為注意!?。。。?!
在com包下創(chuàng)建alibaba.druid.pool(路徑別錯(cuò)了)
DruidAbstractDataSource類直接復(fù)制過來
然后在復(fù)制過來的類中找到以下兩個(gè)方法
注釋掉畫圈位置
至此,本地的項(xiàng)目已經(jīng)配置完成,下面剩下最后一個(gè)步驟,在Nacos上創(chuàng)建配置文件
這個(gè)Data id 與上面第二個(gè)步驟中的名稱配置對應(yīng)(注意看注釋)
配置格式要勾選Properties
點(diǎn)擊發(fā)布,搞定!
到此這篇關(guān)于SpringBoot使用Nacos動(dòng)態(tài)配置數(shù)據(jù)源的方法的文章就介紹到這了,更多相關(guān)SpringBoot動(dòng)態(tài)配置數(shù)據(jù)源內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
常用的Java數(shù)據(jù)結(jié)構(gòu)知識(shí)點(diǎn)匯總
這篇文章主要介紹了常用的Java數(shù)據(jù)結(jié)構(gòu)知識(shí)點(diǎn)匯總,數(shù)據(jù)結(jié)構(gòu)分線性數(shù)據(jù)結(jié)構(gòu)和非線性數(shù)據(jù)結(jié)構(gòu),下面對此作詳細(xì)介紹,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)或工作有所幫助2022-03-03Java隊(duì)列篇之實(shí)現(xiàn)數(shù)組模擬隊(duì)列及可復(fù)用環(huán)形隊(duì)列詳解
像棧一樣,隊(duì)列(queue)也是一種線性表,它的特性是先進(jìn)先出,插入在一端,刪除在另一端。就像排隊(duì)一樣,剛來的人入隊(duì)(push)要排在隊(duì)尾(rear),每次出隊(duì)(pop)的都是隊(duì)首(front)的人2021-10-10idea創(chuàng)建的idea項(xiàng)目時(shí)springframework出現(xiàn)紅色的原因和解決方法
當(dāng)使用 IntelliJ IDEA 創(chuàng)建 Spring Framework 項(xiàng)目時(shí),springframework 出現(xiàn)紅色可能是因?yàn)橄嚓P(guān)的 Spring Framework 依賴沒有正確加載或項(xiàng)目的配置有問題,本文給大家介紹了一些常見的原因和解決方法,需要的朋友可以參考下2023-09-09解決JavaEE開發(fā)中字符編碼出現(xiàn)亂碼的問題
下面小編就為大家?guī)硪黄鉀QJavaEE開發(fā)中字符編碼出現(xiàn)亂碼的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07IntelliJ?IDEA?2023.1.4?無法刷新Maven項(xiàng)目模塊的問題及解決方法
這篇文章主要介紹了如何排查?IDEA?自身報(bào)錯(cuò)問題,本文以IntelliJ?IDEA?2023.1.4無法刷新項(xiàng)目Maven模塊的問題為例,給大家詳細(xì)講解,需要的朋友可以參考下2023-08-08springboot集成shiro詳細(xì)總結(jié)
這幾天在看 shiro,用 springboot 集成了一下,下面的這個(gè)例子中主要介紹了 shiro 的認(rèn)證和授權(quán),以及鹽值加密的功能.程序可以運(yùn)行起來.這里只做一個(gè)簡單的介紹,后續(xù)會(huì)針對各個(gè)功能做一個(gè)詳細(xì)的介紹,這里不做過多的贅述,需要的朋友可以參考下2021-05-05Java生產(chǎn)者消費(fèi)者的三種實(shí)現(xiàn)方式
這篇文章主要介紹了Java生產(chǎn)者消費(fèi)者的三種實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07基于springboot的flowable工作流實(shí)戰(zhàn)流程分析
這篇文章主要介紹了基于springboot的flowable工作流實(shí)戰(zhàn)流程分析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10