溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot怎么使用Nacos動態(tài)配置數(shù)據(jù)源

發(fā)布時間:2021-03-22 10:40:50 來源:億速云 閱讀:899 作者:小新 欄目:開發(fā)技術

這篇文章主要介紹SpringBoot怎么使用Nacos動態(tài)配置數(shù)據(jù)源,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

SpringBoot/SpringCloud項目部署運行后,如果使用硬編碼方式定義數(shù)據(jù)源,那么如果需要更換數(shù)據(jù)庫,就只能通過更改源碼并重啟的方式來達成目的
而SpringCloud生態(tài)中有配置中心這一組件,我們可以將數(shù)據(jù)源連接屬性編寫在配置中心中,需要修改連接屬性就可以從配置中心中修改并發(fā)布,這樣就可以熱修改數(shù)據(jù)源位置無需重啟服務

那么下面實戰(zhàn)說明如何將使用Nacos配置/注冊中心配置數(shù)據(jù)源(請注意看我寫的注釋來避坑)

首先說明版本

  1. SpringBoot 2.2.0.RELEASE

  2. Druid 1.1.22 (再重寫的時候類會隨著版本的不同而不同)

  3. MySQL 8.0.18

  4. Nacos 1.3.1(Nacos版本不對很可能會踩坑)

  5. IDEA 2020.3.2

  6. MyBatis 2.1.4(沒用上,但若使用并不沖突)

文章較長,但大多都是復制粘貼操作,先在這里說明整個配置的步驟

  1. 創(chuàng)建SpringBoot項目并引入依賴(直接復制粘貼)

  2. 創(chuàng)建bootstrap.yml文件(直接復制粘貼)

  3. 創(chuàng)建配置類(直接復制粘貼)

  4. 重寫Druid的DruidAbstractDataSource類(這個需要根據(jù)版本來修改)

  5. 在Nacos配置中心中新建配置

完成配置后的項目目錄

SpringBoot怎么使用Nacos動態(tài)配置數(shù)據(jù)源

請注意:我默認讀者會使用IDEA創(chuàng)建SpringBoot項目,并且可以自己安裝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(這個優(yōu)先級高于propertie文件,用于配置Nacos)

如果需要區(qū)分生產(chǎn)環(huán)境或將Nacos持久化至MySQL請自行學習Nacos官方文檔

spring:
 application:
 	#這個服務名稱與最下面的file-extension: properties合起來
 	#即questionBank.properties為Nacos配置文件的名稱
  name: questionBank
 cloud:
  nacos:
   #注冊中心
   discovery:
    # 是否啟用
    enabled: true
    # nacos服務地址
    server-addr: 127.0.0.1:8848
    # 服務名
    #service: ${spring.application.name}
    # 組名
    group: DEFAULT
    # 權重
    weight: 2
    # 元數(shù)據(jù)
    metadata:
     auth: sty
     version: 1.0
    # 日志名
    log-name: ${spring.application.name}
    # 是否開啟watch
    watch: true
    # 多長時間從服務端拉取一次
    watch-delay: 30000
    # 集群名稱
    cluster-name: DEFAULT
    # 是否開啟注冊,如果為false,不會將自身注冊上去
    register-enabled: true
    # https
    secure: false
   #配置中心
   config:
    server-addr: 127.0.0.1:8848
    #個人比較喜歡用properties文件,yaml縮進老出錯
    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一定要加?。。。。。?!否則將無法自動刷新從Nacos發(fā)布的新數(shù)據(jù),因為lombok比較好用所以@Data就直接用他的了

4.然后就是最重要的一步(這個視Druid版本來修改)

重申一下我用的Druid版本為1.1.22

重寫com.alibaba.druid.pool.DruidAbstractDataSource類
由于Druid只允許初始化一次,所以只能修改他的源碼,而版本不同會導致該類并不相同,在修改源碼時必須尤為注意?。。。。?!

在com包下創(chuàng)建alibaba.druid.pool(路徑別錯了)

SpringBoot怎么使用Nacos動態(tài)配置數(shù)據(jù)源

DruidAbstractDataSource類直接復制過來

SpringBoot怎么使用Nacos動態(tài)配置數(shù)據(jù)源

然后在復制過來的類中找到以下兩個方法
注釋掉畫圈位置

SpringBoot怎么使用Nacos動態(tài)配置數(shù)據(jù)源
SpringBoot怎么使用Nacos動態(tài)配置數(shù)據(jù)源

至此,本地的項目已經(jīng)配置完成,下面剩下最后一個步驟,在Nacos上創(chuàng)建配置文件

SpringBoot怎么使用Nacos動態(tài)配置數(shù)據(jù)源

這個Data id 與上面第二個步驟中的名稱配置對應(注意看注釋)
配置格式要勾選Properties

SpringBoot怎么使用Nacos動態(tài)配置數(shù)據(jù)源

點擊發(fā)布,搞定!

以上是“SpringBoot怎么使用Nacos動態(tài)配置數(shù)據(jù)源”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI