1

現在、Spring@Profileを使用して、環境 (DEV、TEST、PROD) に基づいて Web アプリケーションの構成を管理しています。適切なプロファイルを有効にするために、spring.profiles.activeinの値をハードコーディングしないことを好みweb.xmlます。むしろ、アクティブ化する適切なプロファイルを決定するために、サーバーからの JNDI に依存したいと考えています。spring.profiles.activeWeb アプリケーションで DEV プロファイルをアクティブにするために、DEV などの値で呼び出される JNDI 文字列を作成することで、これを機能させることができます。

bla/environment問題は、サーバー環境に、値 DEV、TEST、または PROD を含むカスタム JNDI (たとえば、) が既にあることです。

spring.profiles.active同じことを行う別の JNDI を作成する必要がないように、このカスタム JNDI に基づいて設定することは可能ですか?

ありがとうございました。

4

3 に答える 3

3

を指す JNDI エントリのアプリケーション固有のエイリアスをいつでも作成できますbla/environment。これを行う方法は、アプリケーション サーバーによって異なります。

それが実現できない場合は、いつでもカスタムを実装できますApplicationContextInitializer(Spring 3.1 以降で利用可能)。これにより、カスタム jndi エントリが読み取られ、アクティブな環境が設定されます。

public class EnvironmentApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {

    private final JndiLocatorDelegate jndi = JndiLocatorDelegate.createDefaultResourceRefLocator();

    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        String profile = jndi.lookup("bla/environment", String.class); 
        applicationContext.getEnvironment().addActiveProfile(profile);
    }
}

try/catchそのようなもので、エントリが存在しない場合にアプリケーションが失敗せず、単にデフォルトのメカニズムに依存するようにラップします。

web.xml にエントリを追加して有効にする必要があります (または、DispatcherServletそこで使用する場合は init-param として追加します)。

<context-param>
    <param-name>contextInitializerClasses</param-name>
    <param-value>your.package.here.EnvironmentApplicationContextInitializer</param-value>
</context-param>
于 2013-10-08T08:51:16.487 に答える
0

プロファイル JNDI エントリのアプリ固有のエイリアスを作成します ( bla/environment)。詳細については、この質問に対する受け入れられた回答をご覧ください。

于 2013-10-07T21:59:26.337 に答える
0

試していませんが、できると思います

<bean id="currentProfileName" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/bla/environment"/>
</bean>

そしてそれを春のアクティブなプロファイルとして入れます

<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>spring.profiles.active</value>
        <ref bean="currentProfileName" />
    </list>
   </property>
</bean>
于 2013-10-07T21:38:08.817 に答える