使用配置中心之前,一般这样实现配置,把配置都放到配置文件中,Java代码通过@Value去拿配置或者通过@PropertySource来进行配置:
shortLink:
url: https://openapidev.xinchengyue.com
appId: 2020092275789623479853728
privateKeyIsv: MIIEvgIBADANBgqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCe7DUtSpPMpejhC6vg5HR6Xl15A3QwOueu
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Test {
@Value("${shortLink.url}")
private String url;
@Value("${shortLink.appId}")
private String appId;
@Value("${shortLink.privateKeyIsv}")
private String privateKeyIsv;
@RequestMapping("/test")
public String test(){
return "url:" + url + "appId:" + appId + "privateKeyIsv:" + privateKeyIsv;
}
}
启动服务,访问 http://localhost:8080/test 返回信息
url:https://openapidev.xinchengyue.com
appId:2020092275789623479853728
privateKeyIsv:MIIEvgIBADANBgqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCe7DUtSpPMpejhC6vg5HR6Xl15A3QwOueu
参考:安装步骤
启动后如图所示:
访问:http://localhost:8848/nacos/index.html
接下来,讲一下如何在您的 Spring Cloud 项目中启用 Nacos 的服务发现功能。配置服务,从而服务可以通过 Nacos 的服务注册发现功能将其服务注册到 Nacos server 上。
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
<version>2.1.1.RELEASEversion>
dependency>
注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
application.yml中配置 Nacos server 的地址和应用名。
spring:
application:
name: nacos-test
cloud:
nacos:
discovery:
server-addr: localhost:8848
通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能。
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableDiscoveryClient
public class XlfTestApplication {
public static void main(String[] args) {
SpringApplication.run(XlfTestApplication.class, args);
}
}
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
<version>2.1.1.RELEASEversion>
dependency>
注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
在Nacos server上增加配置信息(配置管理->配置列表->新增配置)
spring:
application:
name: nacos-test
cloud:
nacos:
config:
server-addr: localhost:8848
group: DEFAULT_GROUP
file-extension: yml
refresh-enabled: true
prefix: nacos-test
为什么要新建bootstrap.yml配置文件,而不是直接在原来的application.yml中新增配置呢?是因为要实现nacos配置中心里面的配置要优先于系统配置文件中的配置,假如两个地方同时配置了,会优先取nacos的配置
配置说明:
启动项目,访问 http://localhost:8080/test
返回信息
url:nacos------https://openapidev.xinchengyue.com
appId:nacos------2020092275789623479853728
privateKeyIsv:nacos------MIIEvgIBADANBgqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCe7DUtSpPMpejhC6vg5HR6Xl15A3QwOueu
说明已经读到nacos中的配置了,而且本地配置文件和nacos中同时配置的,取的是nacos中的配置
在配置的类增加@RefreshScope就可以实现自动刷新配置,当nacos中的配置修改后,项目无需重启就可以自动生效,这个在实际生产环境中是很有用的,有时候你需要修改线上的配置,如果没有配置中心,你需要重启服务
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RefreshScope//自动刷新配置
public class Test {
@Value("${shortLink.url}")
private String url;
@Value("${shortLink.appId}")
private String appId;
@Value("${shortLink.privateKeyIsv}")
private String privateKeyIsv;
@RequestMapping("/test")
public String test(){
return "url:" + url + "appId:" + appId + "privateKeyIsv:" + privateKeyIsv;
}
}