グローバル・トランザクションに登録されている分散トランザクション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})
それが開き、設定ファイルを読み込みます。
だから我々は、異なるトランザクション管理サービス間の問題を解決することができるということ。
このプログラムは、パフォーマンスは非常に良いではない、何の補償メカニズムが存在しないため、マイクロサービスのために推奨されません(電子ビジネスシステムは、一般的に、一般的に、従来のプロジェクトのために使用されるこの方法は、使用しないでください)。小項目は、このように使用することができ、あなたがデータソースに取得することができます。