2016-08-18 20 views
0

リンクする環境を含む変数の値に基づいてJNDIリソースを選択することはどうしてですか?環境に基づいてJNDIを選択する方法

たとえば、私のドメインには、DEV、QA、STAGEという3つの環境があります。これらの環境のそれぞれに存在するEcommReportingというデータベースがあります。これに対応するために、私のTomcatサーバーのserver.xmlファイルには、DEV_EcommReportingQA_EcommReportingおよびSTAGE_EcommReportingのエントリがあります。

質問は、私のコードがちょうどEcommReportingという名前のJNDIリソースを要求することができ、環境名を提供し、これらの2つの詳細に基づいて正しいリソースが返されるということですか?ここで

は今、私は春使用してデータソースBeanを定義しています:

<ResourceLink name="jdbc/EcommReporting" 
       global="jdbc/QA_EcommReporting" 
       auth="Container" 
       type="javax.sql.DataSource" /> 

:(のみQAバージョンを示す)私のTomcatサーバーののcontext.xmlに続いて

<bean id="EcommReportingDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
     <property name="jndiName" value="java:comp/env/jdbc/EcommReporting"/> 
    </bean> 

を、私はこれを持っています最後に、私のTomcatサーバーのserver.xmlで、JNDIリソースを次のように定義しました。

<Resource name="jdbc/QA_EcommReporting" 
     global="jdbc/QA_EcommReporting" 
     auth="Container" 
     type="javax.sql.DataSource" 
     driverClassName="com.mysql.jdbc.Driver" 
     url="jdbc:mysql://URLHERE.COM:3311/REPORTING" 
     username="username_here" 
     password="password_here" 

     maxActive="100" 
     maxIdle="20" 
     minIdle="5" 
     maxWait="10000"/> 

ads

+0

でサーバを起動した場合3つのTomcatインスタンスがあり、異なるJVMの3つのインスタンスで使用されているデータソースにアクセスできるようにしたいのですが、それは必要なのでしょうか? –

答えて

0

あなたはSpringプロファイルを使って何かできます。正確な設定が何であるかは不明です.3つのWARのすべてが同じサーバーに配備されているように聞こえるのですか?その場合は、アクティブなプロファイルを動的に設定する必要があります。私が考えることの1つの方法は、ServletContextListenerを使用し、配備されたアプリケーションのパスをチェックすることです。

基本的に、3つのデータソースBeanを作成し、それらを特定のプロファイルに関連付けます。このプロセスは、ここで概説されています

https://spring.io/blog/2011/02/11/spring-framework-3-1-m1-released/

<beans profile="dev"> 
    <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/Dev_EcommReporting"/> 
</beans> 
<beans profile="qa"> 
    <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/QA_EcommReporting"/> 
</beans> 

をあなたは、その後のServletContextListenerを作成し、パスに基づいてアクティブなプロファイルを設定することができます。ここ

@Override 
    public void contextInitialized(ServletContextEvent event) { 

     ServletContext context = event.getServletContext(); 

     if(context.getContextPath().equals("/dev"){ 
      servletContext.setInitParameter("spring.profiles.active", "dev"); 
     } else if(context).getCOntextPath().equals("/qa"){ 
      servletContext.setInitParameter("spring.profiles.active", "qa"); 
     } 
    } 

さらに詳しい情報:

https://www.mkyong.com/spring/spring-profiles-example/

異なるサーバーにデプロイされたすべてのアプリケーションは、ちょうどそれが何明確ではない-Dspring.profiles.active = xyzの

関連する問題