Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 春季动态特征旗_Java_Spring_Toggle - Fatal编程技术网

Java 春季动态特征旗

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来实现这个目的,但它只在我打开

我的web应用程序有一个方法
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设置如果值在读取的同时更新/刷新会发生什么?这不是比赛条件吗?