@RefreshScope 具有不同的 *.properties 文件
@RefreshScope with different *.properties files
我想在调用刷新端点时重新加载多个配置文件。它与 application.properties 文件中的条目完美配合。任何其他文件都不会刷新。
这里有一个小例子:
pom.xml
...
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
<version>2.2.4.RELEASE</version>
</dependency>
</dependencies>
...
application.properties
greeting=Hi
management.endpoints.web.exposure.include=refresh
test.properties
test=Test
ConfigFileHolder1
@Repository
@PropertySource(value="application.properties")
@RefreshScope
public class ConfigFileHolder1 {
@Value("${greeting}")
private String greeting;
public String getGreeting() {
return greeting;
}
}
ConfigFileHolder2
@Repository
@PropertySource(value="test.properties")
@RefreshScope
public class ConfigFileHolder2 {
@Value("${test}")
private String test;
public String getTest() {
return test;
}
}
Api控制器
@Controller
@RefreshScope
public class ApiController implements Api {
@Autowired
private ConfigFileHolder1 config1;
@Autowired
private ConfigFileHolder2 config2;
// do something with config1 and config2
...
}
调用refresh-endpoint后只有ConfigFileHolder1会刷新其值。要刷新 ConfigFileHolder2 的值,应用程序必须重新启动。
我必须更改什么才能刷新我所有 config-files/ConfigFileHolder 的值?
感谢您的帮助。
@RefreshScope
仅适用于 Spring Boot 加载的属性,不适用于稍后在进程中加载的 @PropertySource
s。因此,您需要告诉 Spring Boot 加载额外的 configuration files.
您可以通过添加名称 (spring.config.name
) 或位置 spring.config.additional-location
.
来完成此操作
指定其他名称时,请确保包括默认的 application
以及不会再加载的其他名称。
--spring.config.name=application,test
将以上内容指定为参数时,将检查所有位置的 application.properties
和 test.properties
,并且还将应用配置文件的扩展。
--spring.config.additional-location=classpath:test.properties
这只会从 class 路径加载 test.properties
并且几乎不可能在运行时更改文件,但文件将从该确切位置加载。将不应用配置文件扩展。
我想在调用刷新端点时重新加载多个配置文件。它与 application.properties 文件中的条目完美配合。任何其他文件都不会刷新。
这里有一个小例子:
pom.xml
...
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
<version>2.2.4.RELEASE</version>
</dependency>
</dependencies>
...
application.properties
greeting=Hi
management.endpoints.web.exposure.include=refresh
test.properties
test=Test
ConfigFileHolder1
@Repository
@PropertySource(value="application.properties")
@RefreshScope
public class ConfigFileHolder1 {
@Value("${greeting}")
private String greeting;
public String getGreeting() {
return greeting;
}
}
ConfigFileHolder2
@Repository
@PropertySource(value="test.properties")
@RefreshScope
public class ConfigFileHolder2 {
@Value("${test}")
private String test;
public String getTest() {
return test;
}
}
Api控制器
@Controller
@RefreshScope
public class ApiController implements Api {
@Autowired
private ConfigFileHolder1 config1;
@Autowired
private ConfigFileHolder2 config2;
// do something with config1 and config2
...
}
调用refresh-endpoint后只有ConfigFileHolder1会刷新其值。要刷新 ConfigFileHolder2 的值,应用程序必须重新启动。
我必须更改什么才能刷新我所有 config-files/ConfigFileHolder 的值?
感谢您的帮助。
@RefreshScope
仅适用于 Spring Boot 加载的属性,不适用于稍后在进程中加载的 @PropertySource
s。因此,您需要告诉 Spring Boot 加载额外的 configuration files.
您可以通过添加名称 (spring.config.name
) 或位置 spring.config.additional-location
.
指定其他名称时,请确保包括默认的 application
以及不会再加载的其他名称。
--spring.config.name=application,test
将以上内容指定为参数时,将检查所有位置的 application.properties
和 test.properties
,并且还将应用配置文件的扩展。
--spring.config.additional-location=classpath:test.properties
这只会从 class 路径加载 test.properties
并且几乎不可能在运行时更改文件,但文件将从该确切位置加载。将不应用配置文件扩展。