本文測試使用的springcloud版本為:
Dalston.SR1
很多朋友只知道springcloudconfig可以刷新遠(yuǎn)程git的配置到內(nèi)存中,
卻不知道springcloudconfig的客戶端可以脫離服務(wù)端使用,
更不知道springcloudconfig客戶端結(jié)合actuator還可以刷新本地的配置文件到內(nèi)存中。
具體做法如下:
1、pom:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<? xml version = "1.0" encoding = "UTF-8" ?> < project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/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 > <!--監(jiān)控+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 > |
單獨(dú)引入 spring-boot-starter-actuator或者spring-cloud-starter-config(springcloudconfig的客戶端) 是不會暴露/refresh端點(diǎn)的,兩者同時(shí)引入之后才能暴露/refresh端點(diǎn)。
2、一般使用spring-cloud-starter-config的文章都會讓你在bootstrap里加上配置中心服務(wù)端的地址,這里我們要脫離配置中心服務(wù)端使用,所以這些配置完全不需要。
3、對需要刷新的屬性使用@Value注解,同時(shí)將類使用@RefreshScope注解進(jìn)行標(biāo)記,示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package com.liuyx.test; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.context.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; } } |
這里我的變量是一個(gè)static變量,所以只能在非static的set方法上加@Value注解,而不是變量定義行的上方。如果不是靜態(tài)變量則可以直接寫作:
1
2
|
@Value ( "${server.port}" ) private int port; |
4、application.properties配置
1
2
3
|
server.port=80 local.test=hello1 management.security.enabled=false |
5、測試
1、啟動項(xiàng)目,訪問 http://localhost/port顯示 80
2、修改classpath(注意是classpath,即你編譯后的class文件所處的目錄)下的application.properties將server.port改為801
3、發(fā)送空post(注意是post)請求到 http://localhost:80/refresh
4、再次訪問http://localhost/port顯示 801測試成功
最后的補(bǔ)充:
即使結(jié)合配置中心服務(wù)端使用,該方法也是有效的,所有有效位置的有效配置文件(如git上的,jar內(nèi)的,jar外的)都會被掃描,并根據(jù)一定的順序進(jìn)行覆蓋
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注服務(wù)器之家的更多內(nèi)容!
原文鏈接:https://www.cnblogs.com/flying607/p/8459397.html