𝑰’𝒎 𝒉𝒉𝒈, 𝑰 𝒂𝒎 𝒂 𝒈𝒓𝒂𝒅𝒖𝒂𝒕𝒆 𝒔𝒕𝒖𝒅𝒆𝒏𝒕 𝒇𝒓𝒐𝒎 𝑵𝒂𝒏𝒋𝒊𝒏𝒈, 𝑪𝒉𝒊𝒏𝒂.
- 🏫 𝑺𝒉𝒄𝒐𝒐𝒍: 𝑯𝒐𝒉𝒂𝒊 𝑼𝒏𝒊𝒗𝒆𝒓𝒔𝒊𝒕𝒚
- 🌱 𝑳𝒆𝒂𝒓𝒏𝒊𝒏𝒈: 𝑰’𝒎 𝒄𝒖𝒓𝒓𝒆𝒏𝒕𝒍𝒚 𝒍𝒆𝒂𝒓𝒏𝒊𝒏𝒈 𝒅𝒆𝒔𝒊𝒈𝒏 𝒑𝒂𝒕𝒕𝒆𝒓𝒏, 𝑳𝒆𝒆𝒕𝒄𝒐𝒅𝒆, 𝒅𝒊𝒔𝒕𝒓𝒊𝒃𝒖𝒕𝒆𝒅 𝒔𝒚𝒔𝒕𝒆𝒎, 𝒎𝒊𝒅𝒅𝒍𝒆𝒘𝒂𝒓𝒆 𝒂𝒏𝒅 𝒔𝒐 𝒐𝒏.
- 💓 𝑯𝒐𝒘 𝒕𝒐 𝒓𝒆𝒂𝒄𝒉 𝒎𝒆:𝑽𝑿
- 📚 𝑴𝒚 𝒃𝒍𝒐𝒈: 𝒉𝒕𝒕𝒑𝒔://𝒉𝒉𝒈𝒚𝒚𝒅𝒔.𝒃𝒍𝒐𝒈.𝒄𝒔𝒅𝒏.𝒏𝒆𝒕/
- 💼 𝑷𝒓𝒐𝒇𝒆𝒔𝒔𝒊𝒐𝒏𝒂𝒍 𝒔𝒌𝒊𝒍𝒍𝒔:𝒎𝒚 𝒅𝒓𝒆𝒂𝒎
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
版权声明:本文为作者原创文章,转载请附上博文链接!