需要导入jar包
<!-- JPA --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jta-atomikos</artifactId> </dependency>
我使用的是springboot yml文件配置数据库
appwms: datasource: driverClassName: oracle.jdbc.OracleDriver url: jdbc:oracle:thin:@127.1.1.1:1521:ORCL username: test password: 121212 platform: datasource: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://127.1.1.1:1521:3306/test?useUnicode=true&characterEncoding=utf8 username: test password: 121212
最主要的类
package com.creditall.innavotion.credit.reporting.config;
import com.alibaba.druid.pool.xa.DruidXADataSource;
import com.atomikos.icatch.jta.UserTransactionImp;
import com.atomikos.icatch.jta.UserTransactionManager;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.jta.atomikos.AtomikosDataSourceBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.transaction.jta.JtaTransactionManager;
import javax.sql.DataSource;
import javax.transaction.UserTransaction;
@Configuration
@MapperScan(value = "mapper地址", sqlSessionFactoryRef = "appwmsDataSourceFactory")
public class AppwmsDataSourceConfig {
@Value("${appwms.datasource.url}")
private String url;
@Value("${appwms.datasource.username}")
private String user;
@Value("${appwms.datasource.password}")
private String password;
@Value("${appwms.datasource.driverClassName}")
private String driverClass;
@Bean(name = "appwmsDataSource")
@Primary
public DataSource masterDataSource() {
DruidXADataSource druidXADataSource = new DruidXADataSource();
druidXADataSource.setUrl(url);
druidXADataSource.setUsername(user);
druidXADataSource.setPassword(password);
AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean();
atomikosDataSourceBean.setXaDataSource(druidXADataSource);
atomikosDataSourceBean.setUniqueResourceName("appwmsDataSource");
atomikosDataSourceBean.setPoolSize(5);
return atomikosDataSourceBean;
}
/*使用这个来做总事务 后面的数据源就不用设置事务了*/
@Bean(name = "transactionManager")
@Primary
public JtaTransactionManager regTransactionManager() {
UserTransactionManager userTransactionManager = new UserTransactionManager();
UserTransaction userTransaction = new UserTransactionImp();
return new JtaTransactionManager(userTransaction, userTransactionManager);
}
@Bean(name = "appwmsDataSourceFactory")
@Primary
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("appwmsDataSource") DataSource masterDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(masterDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:mapping/appwms/*.xml"));
return sessionFactory.getObject();
}
}
package com.creditall.innavotion.credit.reporting.config;
import com.alibaba.druid.pool.xa.DruidXADataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.jta.atomikos.AtomikosDataSourceBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
@Configuration
// // 扫描 Mapper接口
@MapperScan(value ="mapper地址" ,sqlSessionFactoryRef = "platformDataSourceFactory")
public class PlatformDataSourceConfig {
@Value("${platform.datasource.url}")
private String url;
@Value("${platform.datasource.username}")
private String user;
@Value("${platform.datasource.password}")
private String password;
@Bean(name = "platformDataSource")
public DataSource masterDataSource() {
DruidXADataSource druidXADataSource = new DruidXADataSource();
druidXADataSource.setUrl(url);
druidXADataSource.setUsername(user);
druidXADataSource.setPassword(password);
AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean();
atomikosDataSourceBean.setXaDataSource(druidXADataSource);
atomikosDataSourceBean.setUniqueResourceName("platformDataSource");
atomikosDataSourceBean.setPoolSize(5);
return atomikosDataSourceBean;
}
@Bean(name = "platformDataSourceFactory")
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("platformDataSource") DataSource masterDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(masterDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:mapping/platform/*.xml"));
return sessionFactory.getObject();
}
}
service方法不用添加注解就可以实现事务控制