java-Springによって挿入されたプロパティファイルを更新して、最後に実行されたタイムスタンプを含める

Springによって読み込まれたプロパティファイルを利用するアプリケーションがあります。次に、Propertiesインスタンスがいくつかのクラスに注入されます。問題は、これらのプロパティの一部が更新されることです。たとえば、ここに格納するlastRunタイムスタンプがあります。このようなものを保存するためのより良い方法があるかもしれません(提案を歓迎します)が、プロパティファイルを更新するにはどうすればよいですか?

<util:properties id="props" location="some.properties"/>

props.store(…)メソッドには、書き込みストリームまたは出力ストリームのいずれかが必要です(Springがこの読み込みを処理するため、これらはすべて不明であると想定しています)。

より良いアプローチがありますか、Spring context.xmlからファイルパスを渡してさまざまなBeanに送信し、プロパティファイルを昔ながらの方法でロード/保存するだけですか?

ベストアンサー
PropertiesFactoryBeanにはlocationプロパティのアクセサーがありませんが、beanDefinitionからlocationプロパティを取得できます。

BeanDefinition def = ctx.getBeanFactory().getBeanDefinition("props");
String location = def.getPropertyValues().getPropertyValue("location").getValue();
File file = ctx.getResource(location).getFile();

編集

それを行うためのサンプルクラスを含めます。 BeanでBeanを定義ファイルに定義し、適切な場所に挿入できます。

/**
 * Update Spring managed properties
 */
public class SpringPropertyUpdater implements ApplicationContextAware {

    private ConfigurableApplicationContext ctx;
    private static final String LOCATION_PROPERTY = "location";
    private static final Log log = LogFactory.getLog(SpringPropertyUpdater.class);

    /**
     * Update managed properties with new value
     */
    public void  updateProperties(String name, Properties props, String comments) {
        ConfigurableListableBeanFactory fb = ctx.getBeanFactory();
        BeanDefinition bf = fb.getBeanDefinition(name);
        String location = (String) bf.getPropertyValues().getPropertyValue(LOCATION_PROPERTY).getValue();
        Resource res = ctx.getResource(location);
        try {
            File file = res.getFile();
            props.store(new FileOutputStream(file), comments);
        } catch (IOException e) {
            log.error(e);
        }
    }

    /**
     * {@inheritDoc}
     */
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.ctx = (ConfigurableApplicationContext) applicationContext;

    }
}

転載記事の出典を記入してください: java-Springによって挿入されたプロパティファイルを更新して、最後に実行されたタイムスタンプを含める - コードログ