目录
- 父项目配置
- pom.xml
- config-nacos项目
- pom.xml
- 配置文件
- application.yml
- bootstrap.yml
- 启动类
- 配置
- 多环境配置
- group
- @RefreshScope
市面上配置中心大致分为三种
- springcloud config
- apollo
- nacos 推荐使用
父项目配置
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><modules><module>order</module><module>stock</module><module>config-nacos</module></modules><groupId>com.cxy.springcloud</groupId><artifactId>springcloudalibaba</artifactId><version>0.0.1-SNAPSHOT</version><name>springcloudalibaba</name><description>springcloud alibaba</description><packaging>pom</packaging><properties><java.version>1.8</java.version><springboot.version>2.3.11.RELEASE</springboot.version><springcloud.version>Hoxton.SR8</springcloud.version><sprigncloud.alibaba.version>2.2.5.RELEASE</sprigncloud.alibaba.version><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.source>1.8</maven.compiler.source></properties><dependencyManagement><dependencies><!-- springboot版本依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>${springboot.version}</version><type>pom</type><scope>import</scope></dependency><!-- springcloud版本依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR8</version><type>pom</type><scope>import</scope></dependency><!-- springcloudalibaba版本依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${sprigncloud.alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
config-nacos项目
创建module
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springcloudalibaba</artifactId><groupId>com.cxy.springcloud</groupId><version>0.0.1-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>config-nacos</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency></dependencies>
</project>
- web是springboot所需依赖
配置文件
application.yml
server:port: 8050
- 只有一个端口号
bootstrap.yml
spring:application:name: 10cloud:nacos:server-addr: 127.0.0.1:8848username: nacospassword: nacosconfig:namespace: public
- nacos的配置信息
- application.name 注意,这里是服务名,跟nacos里面的配置,id对应
启动类
package com.cxy.config;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;/*** @author wu* @version 1.0* @date 2024/2/22 15:16*/
@SpringBootApplication
public class ConfigApplication {public static void main(String[] args) {ConfigurableApplicationContext run = SpringApplication.run(ConfigApplication.class, args);String name = run.getEnvironment().getProperty("user.name");String age = run.getEnvironment().getProperty("user.age");System.out.println(name+","+age);}
}
- 打印用户名和年龄
启动后,改动nacos的配置信息,这里会同步更新
- 删除该配置,解决循环打印的问题
配置
- nacos的默认后缀是properties,如果不是,则需要配置,不然,获取不到对应的配置
多环境配置
一般线上会分dev、test、pre、prod 四个环境
为什么要用配置中心?
像之前不用配置中心的时候,我们需要在本地修改对应配置后,再提交代码,再打包发送到服务器,再启动,一系列的操作。而配置中心就可以很好的解决该问题
-
之前写的服务名是12,没有一点规范,这里改为nacos-config,还是之前的代码。
-
Data Id默认就是服务名
-
nacos-config-dev.yaml,实际上是由几部分组成 “服务名-具体环境.文件后缀”
讲究一个优先级,如果指定dev环境,再先读取dev,再读取本地配置,可以这样记忆,从小到大。
到这里,多环境配置就ok咯,但是,还有一个问题, 就是无法根据不同角色给不同的权限,nacos只根据命令空间设置权限。
group
group可以理解为项目,dataId 理解为服务
spring:application:name: nacos-configcloud:nacos:server-addr: 127.0.0.1:8848username: nacospassword: nacos###解决config循环配置的问题config:#namespace: public####nacos默认格式是propertiesfile-extension: yamlgroup: testshared-configs:- data-id: nacos-config-common.yaml###自动刷新改为true,默认为falserefresh: truegroup: testextension-configs[0]:data-id: nacos-config-extension.yaml###自动刷新改为true,默认为falserefresh: truegroup: test
- shared-configs 扩展配置,一般如果是公有配置,建议使用这种
@RefreshScope
package com.cxy.config.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author wu* @version 1.0* @date 2024/2/23 14:51*/
@RestController
@RequestMapping("/config")
public class ConfigController {@Value("${user.name}")private String userName;@RequestMapping("/show")public String add(){return "Hello Feign!"+userName;}
}
启动项目,再去nacos,修改配置,存在一个问题,配置没有刷新的问题,这是因为@Value无法实现自动更新,需要增加一个主键