私のSpring MVCアプリケーションでは、フロントエンドでユーザーが選択した機能に基づいて、特定の時間に複数のデータベースに接続する必要があります。言いましょう:
1. 3 つの異なる環境 (PROD、PRE-PROD、ステージングなど...) があります。
2.ユーザーは、指定されたデータベースのテーブルのリストを表示したいと考えています。ユーザーは、選択ボックスから項目を選択して送信します。ユーザーの選択に基づいて、それぞれのデータベースに接続して結果を取得する必要があります。
3.一部のデータベースがダウンすることがあります。各データベースの JNDI データ ソースを作成し、それらを jdbcTemplate にマップすると、これらすべての jdbcTemplaates が DAO のプロパティとして定義されます。
<bean id="prodDataSource" ref="prodDSPool"/>
<bean id="preProdDataSource" ref="preProdDSPool"/>
<bean id="statgingDataSource" ref="stagingDSPool" />
...
...
そして、私は私のDAOに他ならない別のBeanを持っています
<bean id="myConnectionsDAO" class="com.example.MyConnectionsDAOImpl">
<property name="prodDataSource">
<ref bean="prodDataSource"/>
</property>
<property name="preProdDataSource">
<ref bean="preProdDataSource"/>
</property>
<property name="preProdDataSource">
<ref bean="preProdDataSource"/>
</property>
</bean>
MyConnectionDAO は、上記のプロパティの getter と setter を持つ pojo です。
上で述べたように、ユーザーの選択に応じて、サービスクラスは関連するデータソースを取得し、jdbcTemplate を構築し、次のようにデータベースにクエリを実行します
if(env.equalsIgnoreCase(EnvEnum.PROD.toString())
{
JdbcTemplate prodTemplate = new JdbcTemplate(myConnectionsDAO.getProdDataSource());
prodTemplate.queryForList("select name form sysibm.systables where creator='admin');
//Core business logic to analyze those tables and proceed...
}else if {//preprod logic} else if{//staging logic}
そして、DB2 データベースからのデータを操作する複雑な機能がたくさんあります。データソースを挿入しているので、Spring config を使用して dao にプロパティです。何らかの理由で、1 つのデータベース/データ ソースがダウンしている場合、1 つ以上のデータ ソースがダウンしているため、アプリケーションを使用できず、nullpointer を取得します。
これらのエラーを処理するにはどうすればよいですか? 基本的に、少なくとも 1 つの DS が稼働している場合は、アプリを稼働させたいと考えています。そして、上記の構成を使用して構成された約 50 のデータベースがあります。
私はかなり混乱しており、この問題を解決する方法についての手がかりが得られていません。よろしくお願いします...