私はコンフィグレーションサーバをspring-cloudから使用しています。私はそれを再起動することなくアプリケーションの設定を更新したい。 application.ymlでルートリフレクション内でコンフィグリフレッシュが機能しない
1)単一の構成、クライアントと注釈@RefreshScopeにgitの
job:
demo:
testMessage: 'My ID is 123'
2)アクチュエータに保存されている:
この
は私のシナリオですコントローラ内にあります。春の統合と@RefreshScope
@Component
@RestController
public class DemoController {
@Value("${job.demo.testMessage}")
String testMessage;
@RequestMapping(value = "/", produces = "application/json")
public List<String> index() {
List<String> env = Arrays.asList(
"config 1 is: " + testMessage
);
return env;
}
}
3)つの流れ:
@RefreshScope
@Slf4j
@Setter
@Component
@ConfigurationProperties(prefix = "job.demo")
public class DemoFlow {
private String testMessage;
@Bean
public IntegrationFlow putDemoModelFlow() {
return IntegrationFlows.from(Http.inboundChannelAdapter("/demoFlow"))
.handle(new DemoHandler())
.handle(m -> log.info("[LOGGING DEMO] {}" , m.getPayload()))
.get();
}
private class DemoHandler implements GenericHandler {
@Override
public String handle(Object payload, Map headers) {
return new StringBuilder().append(testMessage)
.append(" ").toString();
}
}
}
4)I設定を更新し
job:
demo:
testMessage: 'My ID is 789'
5 gitのためにプッシュする)を実行し、リフレッシュ
curl -d{} http://localhost:8002/refresh
コントローラへの残りの呼び出しでは、everyth設定が更新されました。
["config 1 is: My ID is 789"]
しかし、設定が更新されなかった統合フローへのREST呼び出し、中:
[LOGGING DEMO] My ID is 123
設定をリフレッシュするために阻止された豆のいくつかの特定の振る舞いがありますか?
ありがとうございました。
すてきな説明ゲイリーありがとう。 –
さらに、 'job.demo'キーを専用の' @ConfigurationProperties'クラスに入れると、 '@ Value'に' @ RefreshScope'は必要ありません。 – spencergibb