Java 春季动态特征旗
我的web应用程序有一个方法Java 春季动态特征旗,java,spring,toggle,Java,Spring,Toggle,我的web应用程序有一个方法test,cronjob每两分钟调用一次,我希望能够在solution a和solution b之间动态切换,使用一些功能标记,而无需每次部署它 @Scheduled(fixedRateService = "120000") public void test(){ if(conditionA()) { // do solution A } else { // do solution B } } 我本来想使用cookie来实现这个目的,但它只在我打开
test
,cronjob每两分钟调用一次,我希望能够在solution a
和solution b
之间动态切换,使用一些功能标记,而无需每次部署它
@Scheduled(fixedRateService = "120000")
public void test(){
if(conditionA()) {
// do solution A
} else {
// do solution B
}
}
我本来想使用cookie来实现这个目的,但它只在我打开的会话上起作用,而且其他会话也可以调用其他解决方案
是否有任何方法可以强制在生产环境中只运行一个解决方案,并动态地交换它们,而无需每次释放它们
更新:
Jonathan Johx的回答是正确的,我在这里补充了一些澄清
要更新属性的值,首先需要将x-www-form-urlencoded
格式中的键/值发布到\exactor\env
,然后通过向\exactor\refresh发布空负载来强制重新加载属性,您可以使用注释来刷新属性:
1。-在类中添加@RefreshScope
@RefreshScope
@Component
public class Test {
@Value("${conditional.istrue}")
private boolean conditional;
@Scheduled(fixedRateService = "120000")
public void test(){
if(conditional) {
// do solution A
} else {
// do solution B
}
}
}
2。-添加标志属性,并允许暴露端点/refresh
,以刷新新属性
应用程序属性
conditional.istrue=true
management.endpoints.web.exposure.include=*
3。-一旦修改了application.properties,例如:
conditional.istrue=false
然后,您可以执行以下操作来刷新配置:
curl localhost:8080/actuator/refresh -d {} -H "Content-Type: application/json"
参考资料
-谢谢,我想这只有在您有外部配置并提交的情况下才有效?不一定,因为您的项目资源中可以有一个application.properties,如果是这样的话,您就不需要对某些服务进行外部配置。我明白了,但是当我试图通过curl localhost:8080/exactor/refresh-d{conditional.istrue=false}-H“Content Type:application/json”
命令将conditional.istrue
从默认值true更新为false时,值没有改变,我是否遗漏了任何步骤?您不需要传入{}条件。istrue=false,您需要从application.properties@rawdata设置如果值在读取的同时更新/刷新会发生什么?这不是比赛条件吗?