springboot配置动态刷新实现详解
本⽂测试使⽤的spring cloud版本为:
Dalston.SR1
很多朋友只知道spring cloud config可以刷新远程git的配置到内存中,
却不知道spring cloud config的客户端可以脱离服务端使⽤,
更不知道spring cloud config客户端结合actuator还可以刷新本地的配置⽂件到内存中。
具体做法如下:
1、pom:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0"
xmlns:xsi="/2001/XMLSchema-instance"
git使用详解
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.liuyx</groupId>
<artifactId>test-config-refresh</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!--监控+refresh配置-->
<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>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
单独引⼊ spring-boot-starter-actuator或者spring-cloud-starter-config(spring cloud config的客户端)是不会暴露/refresh端点的,两者同时引⼊之后才能暴露/refresh端点。
2、⼀般使⽤spring-cloud-starter-config的⽂章都会让你在bootstrap⾥加上配置中⼼服务端的地址,这⾥我们要脱离配置中⼼服务端使⽤,所以这些配置完全不需要。
3、对需要刷新的属性使⽤@Value注解,同时将类使⽤@RefreshScope注解进⾏标记,⽰例如下:
package st;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.t.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
@RefreshScope
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class);
}
private static int port;
@Value("${server.port}")
public void setPort(int port){
this.port=port;
}
@RequestMapping("/port")
public int port(){
return port;
}
}
这⾥我的变量是⼀个static变量,所以只能在⾮static的set⽅法上加@Value注解,⽽不是变量定义⾏的上⽅。如果不是静态变量则可以直接写作:
@Value("${server.port}")
private int port;
4、application.properties配置
server.port=80
abled=false
5、测试
2、修改classpath(注意是classpath,即你编译后的class⽂件所处的⽬录)下的application.properties将server.port改为801
最后的补充:
即使结合配置中⼼服务端使⽤,该⽅法也是有效的,所有有效位置的有效配置⽂件(如git上的,jar内的,jar外的)都会被扫描,并根据⼀定的顺序进⾏覆盖
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论