多庫データソースの分析(Mybatis+Spring+JTA)(一)


もっと読む
 
最近構造を構築して、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事務管理において、それはデッドタイムでデータソースを切り替えることができません.
 
内容が多いので、この技術のまとめは二つの部分に分けられます.