目录
🌭1.spring cloud Config是什么😶🌫️😶🌫️😶🌫️
🥓2.能干什么😶🌫️😶🌫️😶🌫️
🍿3.服务端配置😶🌫️😶🌫️😶🌫️
🥞4.客户端配置😶🌫️😶🌫️😶🌫️
🍳5.动态刷新 😶🌫️😶🌫️😶🌫️
1.spring cloud Config是什么😶🌫️😶🌫️😶🌫️
SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。
2.能干什么😶🌫️😶🌫️😶🌫️
- 分为服务端和客户端
- 集中管理配置文件
- 不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release
- 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息当
- 配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置
- 将配置信息以REST接口的形式暴露
3.服务端配置😶🌫️😶🌫️😶🌫️
3.1.创建工程😶🌫️😶🌫️😶🌫️
- 1.在父工程下创建
- 2.注意jdk和maven版本号
3.2.添加pom😶🌫️😶🌫️😶🌫️
- 1.springboot依赖
- 2.通用依赖
- 3.eureka依赖
- 4.configcenter依赖
<dependencies><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.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><dependency><groupId>org.example</groupId><artifactId>cloud-api-commons</artifactId><version>${project.version}</version></dependency><!--eureka的Client端--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!--configCenter--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId><!-- 不引入这个较旧的、没有维护的库,因为该版本不支持较新版本的RSA加密 --><exclusions><exclusion><groupId>com.jcraft</groupId><artifactId>jsch</artifactId></exclusion></exclusions></dependency><!-- 该版本支持较新版本的RSA(sha2-256 / sha2-512) --><dependency><groupId>com.github.mwiede</groupId><artifactId>jsch</artifactId><version>0.2.0</version></dependency></dependencies>
3.3.修改yml😶🌫️😶🌫️😶🌫️
在配置文件之前,先配置好自己的gitee或github
server:port: 3344spring:application:name: cloud-config-centercloud:config:server:git:#gitee上面的仓库地址uri: git@gitee.com:hqdmdxz/springcould-config.git#搜索目录search-paths:- sprongcloud-config#gitee的账号username: 账号#gitee的密码password: 密码#读取分支lable: master#注册到eureka
eureka:client:service-url:defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
3.4.主启动类😶🌫️😶🌫️😶🌫️
@EnableConfigServer:启用配置服务器
@SpringBootApplication
@EnableConfigServer
public class ConfigCenterMain3344 {public static void main(String[] args) {SpringApplication.run(ConfigCenterMain3344.class);}
}
3.5.配置类😶🌫️😶🌫️😶🌫️
因为spring-cloud-config-server还不支持github较新的rsa加密方法
@Configuration
public class MyConfig {//Shim to fix the way jGit configures JSchstatic {JSch.setConfig("signature.rsa", "com.jcraft.jsch.jce.SignatureRSA");}
}
3.6.测试😶🌫️😶🌫️😶🌫️
1.启动主启动类
2.在浏览器输入地址
4.客户端配置😶🌫️😶🌫️😶🌫️
4.1.创建工程😶🌫️😶🌫️😶🌫️
- 1.在父工程下创建
- 2.注意jdk和maven版本
4.2.添加pom😶🌫️😶🌫️😶🌫️
1.springbooty依赖
2.通用依赖
3.eureka依赖
4.config依赖
<dependencies><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.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><dependency><groupId>org.example</groupId><artifactId>cloud-api-commons</artifactId><version>${project.version}</version></dependency><!--eureka的Client端--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!--configClient--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency></dependencies>
4.3.修改yml😶🌫️😶🌫️😶🌫️
- applicaiton.yml是用户级的资源配置项
- bootstrap.yml是系统级的,优先级更加高
- 要将Client模块下的application.yml文件改为bootstrap.ymll这是很关键的。
注:bootstrap.yml是比application.yml先加载的。
bootstrap.yml优先级高于application.yml
server:port: 3355
spring:application:name: config-clientcloud:#客户端配置config:#分支名称label: master#配置文件名称name: config#读取后缀名称profile: dev#配置中心地址uri: http://localhost:3344#服务注册到eureka
eureka:client:service-url:defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
4.4.主启动类😶🌫️😶🌫️😶🌫️
@SpringBootApplication
@EnableEurekaClient
public class ConfigClientMain3355 {public static void main(String[] args) {SpringApplication.run(ConfigClientMain3355.class);}
}
4.5测试😶🌫️😶🌫️😶🌫️
- 1.启动主程序类
- 2.浏览器访问
5.动态刷新 😶🌫️😶🌫️😶🌫️
问题:
- 修改GitHub上的配置文件内容做调整
- 刷新3344,发现ConfigServer配置中心立刻响应
- 刷新3355,发现ConfigClient客户端没有任何响应
- 3355没有变化除非自己重启或者重新加载
每次客户端都要重启????
5.1.修改3355模块😶🌫️😶🌫️😶🌫️
添加依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
5.2.修改yml😶🌫️😶🌫️😶🌫️
暴露监控端点
#暴露监控端点
management:endpoints:web:exposure:include: "*"
5.3.修改业务类 😶🌫️😶🌫️😶🌫️
在业务类上面添加@RefreshScope注解
@RestController
@RefreshScope
public class ConfigClientController {@Value("${config.info}")private String configInfo;@GetMapping("/configInfo")public String getConfigInfo(){return configInfo;}
}
5.4.发送POST刷新😶🌫️😶🌫️😶🌫️
在gitee上修改文件内容后,刷新浏览器发现还是不行???????
- 在修改内容之后,手动刷新客户端
curl -X POST "http://localhost:3355/actuator/refresh"