マルチデータソースの設定と切り替え
[color=green]
プロジェクトの中で多すぎるデータソースの間の切り替えを使って、ネット上で探した関連資料は自分の実践と結び付けて、それを記録して、必要な時に調べます。
一、データソースの構成。
コード:
コード:
コード:
コード:
プロジェクトの中で多すぎるデータソースの間の切り替えを使って、ネット上で探した関連資料は自分の実践と結び付けて、それを記録して、必要な時に調べます。
一、データソースの構成。
コード:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<!-- -->
<bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/tenpay_db?user=tenpay&password=cft2008</value>
</property>
<property name="username">
<value>tenpay</value>
</property>
<property name="password">
<value>cft2008</value>
</property>
</bean>
<bean id="fcDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/c2c_db?user=tenpay&password=cft2008</value>
</property>
<property name="username">
<value>tenpay</value>
</property>
<property name="password">
<value>cft2008</value>
</property>
</bean>
<bean id="dataSource" class="com.ben.util.DynamicDataSource">
<property name="targetDataSources">
<map key-type="com.ben.util.CustomerType">
<entry key="fcds" value-ref="fcDataSource"/>
<entry key="myds" value-ref="myDataSource"/>
</map>
</property>
<property name="defaultTargetDataSource" ref="fcDataSource"/>
</bean>
</beans>
データソースの列挙クラス:コード:
/**
* <pre>
* Title: CustomerType.java
* Project: tenpay_Admin
* Type: com.ben.util.CustomerType
* Author: ben.liu
* Create: 2008-11-25 05:12:49
* Copyright: Copyright (c) 2008
* Company:
* <pre>
*/
package com.ben.util;
/**
* <pre>
*
* </pre>
* @author ben.liu
* @version 1.0, 2008-11-25
*/
public enum CustomerType
{
fcds,
myds
}
ダイナミックデータソース:コード:
/**
* <pre>
* Title: DynamicDataSource.java
* Project: tenpay_Admin
* Type: com.ben.util.DynamicDataSource
* Author: ben.liu
* Create: 2008-11-25 02:26:46
* Copyright: Copyright (c) 2008
* Company:
* <pre>
*/
package com.ben.util;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
/**
* <pre>
*
* </pre>
* @author ben.liu
* @version 1.0, 2008-11-25
*/
public class DynamicDataSource extends AbstractRoutingDataSource
{
@Override
protected Object determineCurrentLookupKey() {
return CustomerContextHolder.getCustomerType();
}
}
データソース切替クラス:コード:
/**
* <pre>
* Title: CustomerContextHolder.java
* Project: tenpay_Admin
* Type: com.ben.util.CustomerContextHolder
* Author: ben.liu
* Create: 2008-11-25 02:22:52
* Copyright: Copyright (c) 2008
* Company:
* <pre>
*/
package com.ben.util;
/**
* <pre>
*
* </pre>
* @author ben.liu
* @version 1.0, 2008-11-25
*/
public class CustomerContextHolder
{
private static final ThreadLocal<CustomerType> contextHolder = new ThreadLocal<CustomerType>();
public static void setCustomerType(CustomerType customerType)
{
contextHolder.set(customerType);
}
public static CustomerType getCustomerType()
{
return (CustomerType) contextHolder.get();
}
public static void clearCustomerType()
{
contextHolder.remove();
}
}
データベース操作が必要な場合は、操作前にこのコードを追加すればいいです。
CustomerContextHolder.setCustomerType(CustomerType.myds);
[/color]