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

        共 12651字,需瀏覽 26分鐘

         ·

        2021-03-26 08:38

        點擊上方藍色字體,選擇“標(biāo)星公眾號”

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

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

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


        那么下面實戰(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(沒用上,但若使用并不沖突)

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

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

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

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

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

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

        完成配置后的項目目錄


        請注意:我默認讀者會使用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)境或?qū)acos持久化至MySQL請自行學(xué)習(xí)Nacos官方文檔

        spring:
          application:
           #這個服務(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
                # 多長時間從服務(wù)端拉取一次
                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只允許初始化一次,所以只能修改他的源碼,而版本不同會導(dǎo)致該類并不相同,在修改源碼時必須尤為注意?。。。。?!


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

        DruidAbstractDataSource類直接復(fù)制過來

        然后在復(fù)制過來的類中找到以下兩個方法

        注釋掉畫圈位置

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

        這個Data id 與上面第二個步驟中的名稱配置對應(yīng)(注意看注釋)

        配置格式要勾選Properties

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

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

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

        原文鏈接:

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






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

        ??????

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





        感謝點贊支持下哈 

        瀏覽 119
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 国产美女视频 | 操18p| 偷拍91视频 | 国产毛片aaa | 牛牛视频在线观看 |