3

アプリケーション固有のプロパティー・ファイルで構成されたプロパティーに基づいてキャッシュ・マネージャーを作成するファクトリー Bean を作成しました。

概念は、それぞれが他の構成プロパティを使用して、複数の実装を選択できるということです。

例えば:

  • noop キャッシュ、パラメーターなし、
  • #max オブジェクトの ehcache
  • 複数の IP とポートが構成された memcache。

application-context.xmlですべてのキャッシュ アプリケーション固有のパラメータを指定するのではなく、既存のプロパティ ソースからそれらを読み取るのがよいと思います。

私の試みは、EnvironementAwareインターフェイスを使用してにアクセスすることでしたEnvironement。しかし、を使用して構成されているプロパティ ファイルは、.xml ファイルには<context:property-placeholder>含まれていないようPropertiesSourcesです。

example.properties

cache.implementation=memcached
cache.memcached.servers=server1:11211,server2:11211

アプリケーションコンテキスト.xml

<context:property-placeholder location="example.properties"/>
<bean id="cacheManager" class="com.example.CacheManagerFactory"/>

CacheManagerFactory.java 内

public class CacheManagerFactory implements FactoryBean<CacheManager>, EnvironmentAware {

    private Environement env;

    @Override
    public CacheManager getObject() throws Exception {
        String impl = env.getRequiredProperty("cache.implementation"); // this fails
    //Do something based on impl, which requires more properties.
    }

    @Override
    public void setEnvironment(Environment env) {
        this.env = env;
    }

    @Override
    public Class<?> getObjectType() {
        return CacheManager.class;
    }

    @Override
    public boolean isSingleton() {
        return true;
    }

}
4

1 に答える 1

3

このような設定ファイルで:

 <context:property-placeholder location="classpath:your.properties" ignore-unresolvable="true"/>
  ...
 <property name="email" value="${property1.email}"/>
 <!-- or -->
 <property name="email">
   <value>${property1.email}</value>
 </property>

またはコード内:

@Value("${cities}")
private String cities;

your.propertiesにはこれが含まれています:

cities = my test string 
property1.email = answer@stackvoerflow.com
于 2012-10-08T12:45:10.890 に答える