`
raymond.chen
  • 浏览: 1418199 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用配置中心的配置信息

 
阅读更多

新建一个工程config-consumer,通过分布式配置中心获取和使用配置信息。

 

pom.xml文件关键配置:

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.0.7.RELEASE</version>
	<relativePath/>
</parent>

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
	<java.version>1.8</java.version>
</properties>

<dependencies>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-config</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-config-client</artifactId>
	</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>
</dependencies>

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-dependencies</artifactId>
			<version>Finchley.RELEASE</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

 

Controller类:

@RestController
public class UserController {
	//此参数值来自于配置中心
	@Value("${jdbc.username}")
    private String username;
	
	@GetMapping("/user/info")
    public String getUsername() {
        return username;
    }
}

 

启动类:

@SpringBootApplication
public class Main {
	public static void main(String[] args) {
		SpringApplication.run(Main.class, args);
	}
}

 

application.properties文件的配置:

spring.application.name=config-consumer

#此参数值从配置中心获取
server.port=${configcenter.port}
#server.port=4321

 

bootstrap.properties文件的配置(单配置中心,直接通过URL地址获取配置)

       bootstrap配置文件用来程序引导时执行,应用于更加早期配置信息读取,如可以用来配置application配置文件中使用到的参数等。

       bootstrap配置文件优先于application配置文件加载。

       在spring cloud config client中要用bootstrap配置文件来获取config server的配置信息。

#配置中心应用的URL地址  
spring.cloud.config.uri=http://localhost:4001  

#配置文件config-dev.properties的名称,对应 {name} 部分  
spring.cloud.config.name=config  

#对应 {profile} 部分  
spring.cloud.config.profile=dev  
  
eureka.instance.hostname=${spring.cloud.client.ip-address}  
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}  
eureka.instance.prefer-ip-address=true  
  
eureka.client.service-url.defaultZone=http://root:123456@${eureka.instance.hostname}:7001/eureka/ 

 

高可用配置中心的bootstrap.properties文件配置

    将多个服务名相同的配置中心应用注册到注册中心即可提供配置中心的高可用。

#开启通过服务名来访问config-server
spring.cloud.config.discovery.enabled=true

#config-server的服务名
spring.cloud.config.discovery.service-id=config-center

#配置文件config-dev.properties的名称,对应 {name} 部分  
spring.cloud.config.name=config  

#对应 {profile} 部分  
spring.cloud.config.profile=dev  
  
eureka.instance.hostname=${spring.cloud.client.ip-address}  
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}  
eureka.instance.prefer-ip-address=true  

#注册中心
eureka.client.service-url.defaultZone=http://root:123456@${eureka.instance.hostname}:7001/eureka/

 

 客户端启用配置刷新功能

      在需要获取最新配置信息的Bean类上添加 @RefreshScope 注解,开启refresh功能。以下是Controller类需要获取最新配置信息的用法:

@RestController
@RefreshScope //开启配置中心的更新机制。接到SpringCloud配置中心配置刷新的时候,自动将新的配置更新到该类对应的字段中。
public class UserController {
	//此参数值来自于配置中心
	@Value("${jdbc.username}")
    private String username;
	
	@GetMapping("/user/info")
    public String getUsername() {
        return username;
    }
}

 

    通过actuator/refresh节点端口来刷新带有@RefreshScope注解的bean类:

            在pom.xml文件添加依赖:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

  

            在application.properties文件添加以下配置,导出refresh端点:

#默认只开启health、info两个节点
#management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.include=health,info,refresh

 

            以POST方式触发 http://localhost:4321/actuator/refresh 节点,即可刷新带有@RefreshScope注解的bean类。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics