consul config spring cloud 2022
原理就是把项目中application.yml中的配置移到consul中进行远程管理
当项目启动的时候,去远程读取配置文件的内容,并加载。
项目中resource下面的application.yml删除
新建bootstrap.yml文件
spring: application: name: consulpayment cloud: consul: host: machine136 port: 8500 discovery: service-name: consulpayment config: format: yaml default-context: application #默认全局配置 profile-separator: "-" #配置文件名称和环境的连接符,这里修改为- ,例如 ${spring.application.name}-${spring.profiles.active} data-key: data #这是config的数据key prefixes: config enabled: true import: optional:consul:machine136:8500 profiles: active: dev
prefixes:对应consul配置的config目录名称
format:指定了consul 配置数据的格式 (输入data时右上角的选择)
default-context:application 代表项目的默认配置位于 {prefixes}/{default-context}/{data-key}
profile-separator:"-" 与
proeiles:
active:dev
共同定义了环境配置文件的路径 为 {prefixes}/{spring.application.name}{profile-separator}{spring.profiles.active}/{data-key}
就是:config/consulpayment-dev/data
根目录新增
注意value 中不能用 tab 只能用空格!!!
注意value 中不能用 tab 只能用空格!!!
注意value 中不能用 tab 只能用空格!!!
否则报错
found character '\t(TAB)' that cannot start any token. (Do not use \t(TAB) for indentation)
in 'reader', line 2, column 1:
port: 8032
环境个性化配置
创建完成后的效果:
IEDA 项目测试 注意增加两个starter : consul-config和bootstrap
<?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>springcloud19</artifactId> <groupId>com.hztech</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>config-consul-provider8031</artifactId> <properties> <maven.compiler.source>19</maven.compiler.source> <maven.compiler.target>19</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- consul service --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> <!-- consul config--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> <!-- 公共的模块--> <dependency> <groupId>com.hztech</groupId> <artifactId>common-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> </dependency> <!--mysql-connector-java--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--jdbc--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
启动项目
服务成功注册
测试功能
项目结构
测试修改远程consul 中的 环境配置
客户端程序检测到变化,但是没有自动生效,手动重启动项目后生效,
但是作为值的更新在增加了 注解 @RefreshScope之后是可以实时同步的
客户端刷新