2017-02-21 2 views
2

OSGiバンドルにパッケージされたコンテンツを提供するSpring起動MVCアプリケーションがあります。 OSGiを使用する背後にある目標は、これらのコンテンツバンドルを完全に自己完結型かつホットスワップ可能にすることです。Springが古いリソースストリームを読み込まないようにする

リクエストは、URLを介してバンドルリソースにマップされます。

私が実行している問題は、同じURLで指し示される新しいものでバンドルを置き換え、古いバンドルから提供されていたリソースが要求された場合に発生します。

SpringはすでにそのURLのリソースを返しているので、キャッシュされたバンドルURLのストリームをオープンしようとします。これは、リソースが最後に変更された時点を判断する必要があります。 IOExceptionをスローします。

私が今までに見つけたものはすべて、Spring内部キャッシュではなく、クライアント側のキャッシュポリシーを変更することです。さらに、spring.resource.chain.cachingまたはspring.resources.cache-periodを介してキャッシュを無効にしようとすると、Springはまだ変更された最後のタイムスタンプを把握しようとします。

答えて

2

予期しない場所にこれが設定されています。 addResourceHandlers方法で私のWebMvcConfigurerAdapterに伸びるConfigクラスで

、:

registry.addResourceHandler("**/pluginresource/**") 
.setCacheControl(CacheControl.noStore()) 
.resourceChain(false) 
.addResolver(pluginResourceResolver); 

resourceChain(false)は実際に春がキャッシュを使用するデフォルトのハンドラでチェーンを作成するかどうかを設定します。

関連する問題