0

Configuration オブジェクトを Spring @Bean として公開するときに、Commons Configuration v1 のリロード機能を追加のコーディングなしで使用してきました。これは、構成にアクセスするたびにリロード チェックが実行されるためです。

現在、Commons Configuration v2 に移行しようとしていますが、リロードはビルダーによって作成された新しい構成オブジェクトでのみ有効であることを読みました。

言い換えれば、v1では次のようなことができます

@Bean
public Configuration config() {
    ...
    return builder.getConfiguration();
}

次に、構成を注入します

@Autowired Configuration config;

そして、(必要に応じて)リロードすることを期待します

config.getString("somepath");

今、私は電話する必要があります

builder.getConfiguration()

新しい構成が必要になるたびにもう一度。

では、どうすればいいのでしょうか?多くの @Controllers に既に注入されている @Bean を「リフレッシュ」するのに、Spring の何かが役立ちますか? 自動である必要はありません。管理コンソールに「リロード」ボタンを実装して、それをトリガーすることができます。

4

1 に答える 1

0

コンソールから呼び出されるように、構成を再構築するメソッドを使用して、構成を @Bean として公開された MyConfiguration クラスにラップする必要があるだけかもしれません。何かのようなもの:

public class MyConfiguration {
    private Configuration configuration;

    ... inject builder somehow here

    public void reload() {
        builder.getReloadingController().checkForReloading(null);
        configuration = builder.getConfiguration();
    }

    public String getString(String key) {
        return configuration.getString(key);
    }

    ... all other delegated methods follow

}
于 2016-06-01T20:50:05.237 に答える