2012-03-23 16 views
4

ehcache.xmlファイル($ {}など)にプロパティプレースホルダを配置して、実行時に外部プロパティファイル(.properties)から値を置き換えることができます。 。 のような何か:(クラスパスで)外部プロパティファイルからプロパティを使用するようにehcache.xmlを外部化する

ehcache.xml:

<defaultCache 
maxElementsInMemory="20000" 
eternal="false" 
timeToIdleSeconds="${default_TTI}" 
timeToLiveSeconds="86400" 
overflowToDisk="true" 
... /> 

ehcache.properties(戦争/クラスパスの外側):

... 
default_TTI=21600 
... 

目的は、再構築する必要なしにキャッシュ構成を変更できるようにすることですアプリをild。 SpringのPropertyPlaceHolderは、ehcacheのためのSpring bean定義でのみ動作します(ehcache.xmlをファイルとして保持する必要があります)。

ここにも同様の記事がありますが、解決策はありません。私は今一週間を探しています!春の2.5.6を使用して

イムは、3.2.6および2.4.6 Ehcacheの

を休止すべてのヘルプやアイデアが大幅にappriciatedされる!!

ありがとう、 トリプティ。

答えて

0

あなただけの起動時にread the config in from diskしたい場合は、EHCacheなど2.5で、次の操作を行うことができます。あなたは、システムスコープ(するSystem.setProperty(...)にプロパティ値を設定することができますworkaroudソリューションとして

InputStream fis = 
    new FileInputStream(new File("src/config/ehcache.xml").getAbsolutePath()); 
try 
{ 
    CacheManager manager = new CacheManager(fis); 
} 
finally 
{ 
    fis.close(); 
} 
+0

お返事ありがとうございました! – Tripti

+1

申し訳ありません。私もそれをやろうとしましたが、問題はこのCacheManagerを休止状態にする方法です。ハイバネーションコンテキストファイルに次のコードがあります。 ' true net.sf.ehcache.hibernate.SingletonEhCacheProvider' So hibernateはデフォルトのehcache.xml(jarで利用可能)を使用し始め、作成したCacheMangerを使用せずにキャッシュを作成します。新しいキャッシュを作成する代わりに、CacheManagerを使用するために休止状態を確認する方法はありますか?ありがとう、トリプティ。 – Tripti

2

)。 EhCaheは、これらのプロパティを使用して、構成ファイルの解析中にプレースホルダを解決します。

1

私は最終的に解決策を得ました!その方向で私を指差してくれたbraveterryに感謝します。 私は、コンテキストの起動時にこれを使用:hibernate設定と接続詞で

Inputstream = new FileInputStream(new File("src/config/ehcache.xml").getAbsolutePath()); 
cacheManager = CacheManager.create(stream); 

<prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</prop> 

これは、コンテキスト・クラスパス外ehcache.xmlファイルからシングルトンのCacheManagerを作成します。私は以前と同じようにこれをやっていましたが、クラスパスでデフォルトのehcache.xmlを使用する前に、誤って別のCacheManagerを作成していました。

ありがとう、 トリプティ。

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
     <property name="targetClass" value="java.lang.System" /> 
     <property name="targetMethod" value="setProperty" /> 
     <property name="arguments"> 
      <list> 
       <value>system.project_name</value> 
       <value>${system.project_name}</value> 
      </list> 
     </property> 
    </bean> 

system.project_nameは、system.propertiesファイルに定義し、私もehcache.xmlを作成

クラスパス内で検索:

1

svaor、私はあなたが何を意味するか、次の私はこのようなBeanを定義しますクラスパスに、ehcache.xmlでこのようなコードがあります。

<diskStore path="${java.io.tmpdir}/${system.project_name}/cache" /> 

をしかし、私は私のプロジェクトを展開するとき、私はそれがシステムで定義system.project_nameを使用望めない見つけます。プロパティ、理由は?

関連する問題