在微服务的项目中,经常会有很多的的配置文件,太多的配置文件不利于后期修改,为减少配置文件的处理,这时候会使用springCloud中的config模块进行开发处理,
Config分为server服务端和client客户端,我们把常用的配置放在远程工具(git,SVN,码云)上,然后Config服务端从远程工具上下载需要的配置,然后客户端获取这些配置,最后使用配置
简单使用
1、在码云上编写配置文件 config-dev.yml ,其实就是一个普通的配置文件,配置文件名上最好加-,这样方便后面配置文件的编写
server:
port: 8085
spring:
application:
name: user-provider
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&characterEncoding=utf-8&useSSL=false
password: root
username: root
mybatis:
type-aliases-package: com.lihao
mapper-locations: classes:mapper/*Mapper.xml
eureka:
client:
service-url:
defaultZone: http://root:123456@localhost:7776/eureka/
2、编写config-server项目负责从码云上下载对应配置
首先在原来的springCloud项目依赖前提下增加新的依赖
<!-- config -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
增加配置文件application.yml
server:
port: 7000
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://gitee.com/lihao2/config-server.git
eureka:
client:
service-url:
defaultZone: http://root:123456@localhost:7776/eureka/
在启动类上添加@EnableConfigServer注解,最后运行启动类
启动后访问http://localhost:7000/config-dev.yml 可以看到自己写的配置文件内容说明成功
3、编写config-client
这里的客户端其实指的就是生产者或者消费者,我们直接在生产者端添加依赖即可,首先在user-provider下添加maven依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
在resources目录下创建bootstrap.yml文件,bootstrap.yml作用类似于application.yml,不同的是它在application.yml之前执行
注意name的值和profile的值就是在Git中配置文件的名称
我的配置文件名是config-dev,所以下面的name值是config,profile的值是dev
spring:
application:
name: config
cloud:
config:
uri: http://localhost:7000/
profile: dev
手动刷新
目前config的使用已经结束,但是在实际编程中有的时候需要直接更改远程文件的配置,但是这时候不能直接使用,需要重启服务,那么能不能不重启项目,可以直接使用呢?下面的配置讲的是完成不重启项目,直接手动刷新配置。
为了方便展示手动刷新效果,首先我们在在远程gitee上添加profile属性,什么值无所谓,主要用于展示刷新配置的效果
profile: one
在config-client中添加jar包,也就是服务的生产者或消费者,在本项目中就是user-provider
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在配置文件bootstrap.yml添加下面的设置,取消springBoot验证
management:
security:
enabled: false
最后是controller类
@RestController
@RefreshScope
public class UserService {
// 获取配置中的profile值,并注入
@Value("${profile}")
private String profile;
@RequestMapping("t")
public String test(){
System.out.println(profile);
return "success";
}
}
然后测试
首先所有都启动,然后修改远程中profile的值,然后访问 生产者端的 /refresh 路径,注意访问方式是POST,这时候就完成了手动刷新,可以在生产者端的打印日志上看到,打印的就是最新的值了