多庫データソースの分析(Mybatis+Spring+JTA)(一)
もっと読む
最近構造を構築して、JTAと事務Transationの問題に遭遇しました.ここでまとめます.
アーキテクチャ:Mybatis+Spring
技術:springのAbstractRoutingDataSourceとJTA
古いルールでは、まずコードを貼ります.原理を説明します.最初はJTAを使わないです.コードは以下の通りです.
springでは以下のように構成されています.
各Serviceは現在はDataSourceにしかアクセスできないので、Serviceを呼び出した時に、DataSourceConttext Holder.set Data SourceType(keyはds 1、ds 2)を呼び出します.
データソースを動的に切り替えることができます.
また、スプリングの@Transaction事務管理にも役立ちます.
OKです.このようなモードで、Serviceが複数のライブラリにアクセスできるなら、DataSourceTransation ManagerをJtaTransation Managerに変更します.
もちろん、DatasourceをJNDIに変えて取得します.
springの@Transaction事務管理において、それはデッドタイムでデータソースを切り替えることができません.
内容が多いので、この技術のまとめは二つの部分に分けられます.
最近構造を構築して、JTAと事務Transationの問題に遭遇しました.ここでまとめます.
アーキテクチャ:Mybatis+Spring
技術:springのAbstractRoutingDataSourceとJTA
古いルールでは、まずコードを貼ります.原理を説明します.最初はJTAを使わないです.コードは以下の通りです.
/**
* DataSource ,
*
*/
public class DataSourceContextHolder {
/**
* DataSource , key
*/
public static final ThreadLocal contextHolder = new ThreadLocal();
public static void setDataSourceType(String dataSourceType)
{
contextHolder.set(dataSourceType);
}
public static String getDataSourceType()
{
return contextHolder.get();
}
public static void clearDataSourceType()
{
contextHolder.remove();
}
}
/**
*
*
*/
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDataSourceType();
}
}
springでは以下のように構成されています.
各Serviceは現在はDataSourceにしかアクセスできないので、Serviceを呼び出した時に、DataSourceConttext Holder.set Data SourceType(keyはds 1、ds 2)を呼び出します.
データソースを動的に切り替えることができます.
また、スプリングの@Transaction事務管理にも役立ちます.
OKです.このようなモードで、Serviceが複数のライブラリにアクセスできるなら、DataSourceTransation ManagerをJtaTransation Managerに変更します.
もちろん、DatasourceをJNDIに変えて取得します.
ds1
true
ds2
true
springの@Transaction事務管理において、それはデッドタイムでデータソースを切り替えることができません.
内容が多いので、この技術のまとめは二つの部分に分けられます.