春季动态特征标记

时间:2019-03-19 17:08:04

标签: java spring toggle

我的Web应用程序有一种方法test,它每两分钟就会被cronjob调用一次,我希望能够使用某些功能标记在solution asolution b之间进行动态切换而无需部署每次。

@Scheduled(fixedRateService = "120000")
public void test(){
if(conditionA()) {
  // do solution A
  } else {
  // do solution B
  }
} 

我当时正考虑使用cookie,但是它仅在我打开的会话上有效,并且其他会话仍可以调用其他解决方案。

有什么方法可以强制我在生产环境中运行一个解决方案并动态交换它们,而不必每次都释放它们?

更新: 乔纳森·乔克斯(Jonathan Johx)的回答是正确的,我在这里添加一些澄清

要更新属性的值,首先需要将POST格式的键/值x-www-form-urlencoded更改为\actuator\env,然后通过将空的有效载荷发布到{ {1}}

1 个答案:

答案 0 :(得分:1)

您可以使用@RefreshScope注释来刷新属性:

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,以刷新新属性。

application.properties

  conditional.istrue=true
  management.endpoints.web.exposure.include=*

3 .- 例如,一旦修改了application.properties:

  conditional.istrue=false

然后您可以refresh进行配置注入:

 curl localhost:8080/actuator/refresh -d {} -H "Content-Type: application/json"

参考 -https://spring.io/guides/gs/centralized-configuration/