Spring Cloud 的配置文件是bootstrap或者application两个,如果服务配置过多那么文件内容肯定较多,在普通的spring 项目中都是独立出来一个文件用于标注不同的需求内容,例如数据库,redis等,然后再import导入进来就可以使用,在Spring Cloud中要如何引用呢,在使用过程中发现了几种方式都记录下来,希望对正在学习spring Cloud的“学友”有所帮助。
一、使用:spring.application.name
这种方式对文件名称没有要求,只需要在spring.application.name中增加引用文件即可。
config-client和common两个文件内容简单字符串定义:
- config-client
java: helloWorld
- common
common: commonvalue
在config-client端配置获取两个值
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class SpringcloudConfigClientApplication {
@Value("${java}")
private String java;
@Value("${common}")
private String common;
public static void main(String[] args) {
SpringApplication.run(SpringcloudConfigClientApplication.class, args);
}
@GetMapping("/sayHello")
public String sayHello(){
System.out.println("say java :" + java);
System.out.println("common :"+ common);
return "config-client : "+java+"------common : "+common;
}
}
分别启动consul(端口8500)、config-server(端口9000)、config-client(端口8000),访问http://localhost:8000/sayHello,可以看到返回值以及后台打印与测试一致。
注意: 如果调用配置中心获取配置的服务(config-client)还对其他实例提供的在注册到注册中心时采用的是spring.application.name的方式会变为config-client-common,所以在调用的时候会有问题,如果使用的是consul,那么结合之前发的一篇文章“Spring Cloud Consul 多实例注册问题”可以解决这个问题,需要在consul中配置service-name,保证注册名称与应用名一致,使用Eureka的正在研究如何解决,解决后会发文章说明。
二、使用spring.profiles.include
使用这种方式需要保证引用的外部文件需与本应用的主文件一致,例如:application.yml,则外部文件为application-common.yml。
- 同一应用
直接使用include: common就能达到效果,大家可以自己测试,在这就不展示测试demo了。 - 配置中心
需要在对应的配置文件中添加,例如上文中使用的demo,则需要在config-server服务中的config-client-dev.yml文件中添加include: common
以上两种方式均可以通过spring.profiles.include引用外部文件。
三、使用spring.profiles.active
这种方式也需要引用的文件要与应用的项目名称一致,例如config-client-dev.yml,config-client-common.yml,只需要在config-client应用的spring.profiles.active中定义 dev , common就可以正常使用了。
以上是在学习过程中测试出来的方式,若有不对请指正,或者有其他实现方式也请留言交流,希望本文对学习者有帮助。