<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot使用Nacos動(dòng)態(tài)配置數(shù)據(jù)源

          共 12651字,需瀏覽 26分鐘

           ·

          2021-03-26 08:38

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

          優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

          SpringBoot/SpringCloud項(xiàng)目部署運(yùn)行后,如果使用硬編碼方式定義數(shù)據(jù)源,那么如果需要更換數(shù)據(jù)庫,就只能通過更改源碼并重啟的方式來達(dá)成目的

          而SpringCloud生態(tài)中有配置中心這一組件,我們可以將數(shù)據(jù)源連接屬性編寫在配置中心中,需要修改連接屬性就可以從配置中心中修改并發(fā)布,這樣就可以熱修改數(shù)據(jù)源位置無需重啟服務(wù)


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

          首先說明版本

          1、SpringBoot 2.2.0.RELEASE

          2、Druid 1.1.22 (再重寫的時(shí)候類會(huì)隨著版本的不同而不同)

          3、MySQL 8.0.18

          4、Nacos 1.3.1(Nacos版本不對(duì)很可能會(huì)踩坑)

          5、IDEA 2020.3.2

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

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

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

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

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

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

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

          完成配置后的項(xiàng)目目錄


          請(qǐ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請(qǐng)自行學(xué)習(xí)Nacos官方文檔

          spring:
            application:
             #這個(gè)服務(wù)名稱與最下面的file-extension: properties合起來
             #即questionBank.properties為Nacos配置文件的名稱
              name: questionBank
            cloud:
              nacos:
                #注冊(cè)中心
                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
                  # 是否開啟注冊(cè),如果為false,不會(huì)將自身注冊(cè)上去
                  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è)步驟中的名稱配置對(duì)應(yīng)(注意看注釋)

          配置格式要勾選Properties

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

          ————————————————

          版權(quán)聲明:本文為CSDN博主「bia!」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。

          原文鏈接:

          https://blog.csdn.net/weixin_44870613/article/details/114916246






          鋒哥最新SpringCloud分布式電商秒殺課程發(fā)布

          ??????

          ??長按上方微信二維碼 2 秒





          感謝點(diǎn)贊支持下哈 

          瀏覽 119
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  懂色av懂色av粉嫩av无码 | 五月天成人综合 | 天天看天天插 | 一级性爱生活免费片 | 国产精品久久久九九性 |