SpringCloud + Nacos 配合maven,进行环境(配置文件)的切换,dev/ prod/ test 三种环境

𝑰’𝒎 𝒉𝒉𝒈, 𝑰 𝒂𝒎 𝒂 𝒈𝒓𝒂𝒅𝒖𝒂𝒕𝒆 𝒔𝒕𝒖𝒅𝒆𝒏𝒕 𝒇𝒓𝒐𝒎 𝑵𝒂𝒏𝒋𝒊𝒏𝒈, 𝑪𝒉𝒊𝒏𝒂.

  • 🏫 𝑺𝒉𝒄𝒐𝒐𝒍: 𝑯𝒐𝒉𝒂𝒊 𝑼𝒏𝒊𝒗𝒆𝒓𝒔𝒊𝒕𝒚
  • 🌱 𝑳𝒆𝒂𝒓𝒏𝒊𝒏𝒈: 𝑰’𝒎 𝒄𝒖𝒓𝒓𝒆𝒏𝒕𝒍𝒚 𝒍𝒆𝒂𝒓𝒏𝒊𝒏𝒈 𝒅𝒆𝒔𝒊𝒈𝒏 𝒑𝒂𝒕𝒕𝒆𝒓𝒏, 𝑳𝒆𝒆𝒕𝒄𝒐𝒅𝒆, 𝒅𝒊𝒔𝒕𝒓𝒊𝒃𝒖𝒕𝒆𝒅 𝒔𝒚𝒔𝒕𝒆𝒎, 𝒎𝒊𝒅𝒅𝒍𝒆𝒘𝒂𝒓𝒆 𝒂𝒏𝒅 𝒔𝒐 𝒐𝒏.
  • 💓 𝑯𝒐𝒘 𝒕𝒐 𝒓𝒆𝒂𝒄𝒉 𝒎𝒆:𝑽𝑿
  • 📚 𝑴𝒚 𝒃𝒍𝒐𝒈: 𝒉𝒕𝒕𝒑𝒔://𝒉𝒉𝒈𝒚𝒚𝒅𝒔.𝒃𝒍𝒐𝒈.𝒄𝒔𝒅𝒏.𝒏𝒆𝒕/
  • 💼 𝑷𝒓𝒐𝒇𝒆𝒔𝒔𝒊𝒐𝒏𝒂𝒍 𝒔𝒌𝒊𝒍𝒍𝒔:𝒎𝒚 𝒅𝒓𝒆𝒂𝒎

1-1:环境说明

因为版本不一样,总会有各种问题,所以这里我给出了我的所有的环境。

  • nacos: 1.1.4
  • maven:3.6.3
  • pom.xml:里面有springcloud等一系列的版本
        <!-- 统一管理jar包版本 -->
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <junit.version>4.12</junit.version>
            <log4j.version>1.2.17</log4j.version>
            <lombok.version>1.16.18</lombok.version>
            <mysql.version>5.1.47</mysql.version>
            <druid.version>1.1.16</druid.version>
            <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
        </properties>
    
        <!--
            子模块继承之后,提供作用:
            (1)锁定依赖的版本,统一整个工程的jar包,如果要改项目的依赖,只需要改父项目的就可以了,子项目不用写jar包版本号了
            (2)子module不用写groupId和version
            (3)父pom中,这里只是声明一下,实际上并不会引入依赖,子项目自己写了需要的依赖,才会引入jar包
        -->
        <dependencyManagement>
            <dependencies>
                <!--spring boot 2.2.2-->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>2.2.2.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!--spring cloud Hoxton.SR1-->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Hoxton.SR1</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!--spring cloud alibaba 2.1.0.RELEASE-->
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                    <version>2.1.0.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
    
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>${mysql.version}</version>
                </dependency>
                <dependency>
                    <groupId>com.alibaba</groupId>
                    <artifactId>druid</artifactId>
                    <version>${druid.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.mybatis.spring.boot</groupId>
                    <artifactId>mybatis-spring-boot-starter</artifactId>
                    <version>${mybatis.spring.boot.version}</version>
                </dependency>
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>${junit.version}</version>
                </dependency>
                <dependency>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                    <version>${log4j.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok</artifactId>
                    <version>${lombok.version}</version>
                    <optional>true</optional>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
  • docker-compose.yaml,dokcer构建nacos的配置
    version: "2"
    services:
      nacos:
        image: nacos/nacos-server:1.1.4
        container_name: nacos_test
        environment:
        - MODE=standalone
        volumes:
        - ./logs/:/home/nacos/logs
        ports:
        - "8848:8848"
    

1-2:Nacos操作

主要采用namespace+group+dataId的格式完成三个环境的设置。

  • 创建3个命名空间:记住这里的命名空间ID回头要用
    在这里插入图片描述
  • 分别在不同的命名空间中创建配置,代表3个环境,并设置好需要读取的配置:
    config:
        info: "dataId:nacos-config-client-prod.yaml;group:nacos-group-prod;namespace:099fa140-a9d1-42af-861b-85ae54471703"
    
    在这里插入图片描述在这里插入图片描述
    类似这样的一共设置3个,那么nacos的设置到这就结束了。

1-3:手动切换nacos环境

传统的我们怎么做呢?像这样:

  • application.yml:
    spring:
      profiles:
        active: dev
    
  • bootstrap.yal:
    server:
      port: 3377
    
    spring:
      application:
        name: nacos-config-client
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848  #Nacos服务注册中心地址
          config:
            server-addr: localhost:8848  #Nacos作为配置中心地址
            file-extension: yaml #指定yaml格式的配置
            namespace: aa0828b7-9470-4b30-a387-5f795528e1af
            group: nacos-group-dev
    

如果你要切换到prod环境下,你就得把上面的配置都换掉,换 spring.profiles.active namespace 还有group,那么我就想了,能不能不用手动呢?或者借助什么工具来做呢?事实上是可以的,比如配合maven就可以!

1-4:配合maven实现环境的切换

  • pom.xml:首先在maven配置文件里面,当然了分布式在总的模块pom里面设置就可以了!为了简单,这里就弄两个properties,意思一下就可以了。
    <!--统一配置测试开发生产环境-->
    <profiles>
        <profile>
            <!--开发环境-->
            <id>dev</id>
            <properties>
                <activatedProperties>dev</activatedProperties>
                <nacosNamespace>aa0828b7-9470-4b30-a387-5f795528e1af</nacosNamespace>
                <nacosGroup>nacos-group-${activatedProperties}</nacosGroup>
            </properties>
        </profile>
        <profile>
            <!--测试环境-->
            <id>test</id>
            <!-- 加了这个,默认选中 -->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <!-- 以下属性用于 bootstrap.yml 文件中 可通过 @activatedProperties@ 获取配置的变量-->
            <properties>
                <activatedProperties>test</activatedProperties>
                <nacosNamespace>c16b5823-ed59-48a6-b4af-fa79a17d57e8</nacosNamespace>
                <nacosGroup>nacos-group-${activatedProperties}</nacosGroup>
            </properties>
        </profile>
        <!--生产环境-->
        <profile>
            <id>prod</id>
            <properties>
                <activatedProperties>prod</activatedProperties>
                <nacosNamespace>099fa140-a9d1-42af-861b-85ae54471703</nacosNamespace>
                <nacosGroup>nacos-group-${activatedProperties}</nacosGroup>
            </properties>
        </profile>
    </profiles>
    
  • application.yml
    spring:
      profiles:
        active: @activatedProperties@
    
  • bootstrap.yml
    server:
      port: 3377
    
    spring:
      application:
        name: nacos-config-client
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848  #Nacos服务注册中心地址
          config:
            server-addr: localhost:8848  #Nacos作为配置中心地址
            file-extension: yaml #指定yaml格式的配置
            namespace: @nacosNamespace@
            group: @nacosGroup@
    
  • 分布式项目里面单个服务模块的pom.xml,不加的话@xx@这个符号无法替换成maven配置里面的数据,这一点要注意:
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
    
  • controller
    @RestController
    @RefreshScope  //支持nacos的动态刷新功能
    public class ConfigClientController {
    
        @Value("${config.info}")
        private String configInfo;
    
        @GetMapping("/config/info")
        public String getConfigInfo() {
            return configInfo;
        }
    }
    

1-5:测试

首先maven上面出现了这样的可选记号,我们可以选择自己的环境,然后启动项目。
在这里插入图片描述
接口:

http://127.0.0.1:3377/config/info

在这里插入图片描述
maven切换成dev:
在这里插入图片描述
在这里插入图片描述
可以发现,这里的文件已经成功切换了,这样就可以做到通过nacos来一键切换环境,并且充分利用nacos的特性。

1-6:github地址

这里给出项目github地址,因为有的代码并没有给出,主要就是3377这个测试用的和父模块里面的pom
点我跳转github:或者复制地址:https://github.com/21want28k/springcloud.git


---------------------
作者:河海哥yyds
来源:CSDN
原文:https://blog.csdn.net/qq_41376740/article/details/122792411
版权声明:本文为作者原创文章,转载请附上博文链接!

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值