分散トランザクションのための伝統的なソリューション

グローバル・トランザクションに登録されている分散トランザクションJTA + atomikosのための従来のソリューションは、トランザクションはに登録されたグローバル・トランザクション、プロパティファイルを達成するために行くことをAtomikos:

カスタム属性クラス、および、レジスタを読んAtomikos形成グローバル・トランザクション・クラス

@Configuration

//同じフォルダに置かれた場合に最高別々に設定basePackagesは正しくないかもしれ報告

@MapperScan (basePackages = "com.itmayiedu.test01" 、sqlSessionTemplateRef = "testSqlSessionTemplate"

パブリック クラス  MyBatisConfig1 {

 

//コンフィグレーションデータソース

@Bean (名前= "testDataSource"

パブリック  データソースtestDataSource(DBConfig1testConfigはスロー  SQLExceptionが{

MysqlXADataSource mysqlXaDataSource  = 新しい  MysqlXADataSource();

mysqlXaDataSource .setUrl(testConfig .getUrl())。

mysqlXaDataSource .setPinGlobalTxToPhysicalConnection(真の);

mysqlXaDataSource .setPassword(testConfig .getPassword())。

mysqlXaDataSource .setUser(testConfig .getUsername())。

mysqlXaDataSource .setPinGlobalTxToPhysicalConnection(真の);

 

AtomikosDataSourceBean のXADataSource  = 新しい  AtomikosDataSourceBean()?

XADataSource .setXaDataSource(mysqlXaDataSource )。

XADataSourceの.setUniqueResourceName("testDataSource" );

 

XADataSource .setMinPoolSize(testConfig .getMinPoolSize())。

XADataSource .setMaxPoolSize(testConfig .getMaxPoolSize())。

XADataSource .setMaxLifetime(testConfig .getMaxLifetime())。

XADataSource .setBorrowConnectionTimeout(testConfig .getBorrowConnectionTimeout())。

XADataSource .setLoginTimeout(testConfig .getLoginTimeout())。

XADataSource .setMaintenanceInterval(testConfig .getMaintenanceInterval())。

XADataSource .setMaxIdleTime(testConfig .getMaxIdleTime())。

XADataSource .setTestQuery(testConfig .getTestQuery())。

返す のXADataSourceを

}

 

@Bean (名前= "testSqlSessionFactory"

公共  SqlSessionFactory testSqlSessionFactory(@Qualifier"testDataSource" データソースのdataSource

スロー  例外{

SqlSessionFactoryBean ビーン = 新しい  SqlSessionFactoryBean()。

.setDataSource(データソース)。

リターン .getObject()。

}

 

@Bean (名前= "testSqlSessionTemplate"

公共  SqlSessionTemplate testSqlSessionTemplate(

@Qualifier "testSqlSessionFactory" )SqlSessionFactory sqlSessionFactoryはスロー  例外{

返す 新しい  SqlSessionTemplate(sqlSessionFactory)。

}

}

 

@Configuration

@MapperScan (basePackages = "com.itmayiedu.test02" 、sqlSessionTemplateRef = "test2SqlSessionTemplate"

パブリック クラス  MyBatisConfig2 {

 

//コンフィグレーションデータソース

@Bean (名前= "test2DataSource"

パブリック  データソースtestDataSource(DBConfig2testConfigはスロー  SQLExceptionが{

MysqlXADataSource mysqlXaDataSource  = 新しい  MysqlXADataSource();

mysqlXaDataSource .setUrl(testConfig .getUrl())。

mysqlXaDataSource .setPinGlobalTxToPhysicalConnection(真の);

mysqlXaDataSource .setPassword(testConfig .getPassword())。

mysqlXaDataSource .setUser(testConfig .getUsername())。

mysqlXaDataSource .setPinGlobalTxToPhysicalConnection(真の);

 

AtomikosDataSourceBean のXADataSource  = 新しい  AtomikosDataSourceBean()?

XADataSource .setXaDataSource(mysqlXaDataSource )。

XADataSourceの.setUniqueResourceName("test2DataSource" );

 

XADataSource .setMinPoolSize(testConfig .getMinPoolSize())。

XADataSource .setMaxPoolSize(testConfig .getMaxPoolSize())。

XADataSource .setMaxLifetime(testConfig .getMaxLifetime())。

XADataSource .setBorrowConnectionTimeout(testConfig .getBorrowConnectionTimeout())。

XADataSource .setLoginTimeout(testConfig .getLoginTimeout())。

XADataSource .setMaintenanceInterval(testConfig .getMaintenanceInterval())。

XADataSource .setMaxIdleTime(testConfig .getMaxIdleTime())。

XADataSource .setTestQuery(testConfig .getTestQuery())。

返す のXADataSourceを

}

 

@Bean (名前= "test2SqlSessionFactory"

公共  SqlSessionFactory testSqlSessionFactory(@Qualifier"test2DataSource" データソースのdataSource

スロー  例外{

SqlSessionFactoryBean ビーン = 新しい  SqlSessionFactoryBean()。

.setDataSource(データソース)。

リターン .getObject()。

}

 

@Bean (名前= "test2SqlSessionTemplate"

公共  SqlSessionTemplate testSqlSessionTemplate(

@Qualifier "test2SqlSessionFactory" )SqlSessionFactory sqlSessionFactoryはスロー  例外{

返す 新しい  SqlSessionTemplate(sqlSessionFactory)。

}

}

それがグローバル・トランザクションとして登録されているようAtomikosに登録後、義務は、コメントにのみ@Transactionalで、そのようなデータベース・トランザクション・ポイントのトランザクションマネージャを有効にするには、注釈層を指定していないだろう、と

起動クラスに追加することを忘れないでください

@EnableConfigurationProperties(値= {DBConfig1.class、DBConfig2.class}) 

それが開き、設定ファイルを読み込みます。

だから我々は、異なるトランザクション管理サービス間の問題を解決することができるということ。

このプログラムは、パフォーマンスは非常に良いではない、何の補償メカニズムが存在しないため、マイクロサービスのために推奨されません(電子ビジネスシステムは、一般的に、一般的に、従来のプロジェクトのために使用されるこの方法は、使用しないでください)。小項目は、このように使用することができ、あなたがデータソースに取得することができます。

公開された18元の記事 ウォンの賞賛2 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_32285039/article/details/83860200