yml配置文件
1.数据源配置
@Configuration
public class DataSourceConfiguration {
/**
*
* @return
*/
@Bean(name = "dataSourceMysql")
@ConfigurationProperties(prefix = "spring.datasource.mysql")
public DataSource dataSourceMysql() {
//这种方式的配置默认只满足spring的配置方式,如果使用其他数据连接(druid),需要自己独立获取配置
return DataSourceBuilder.create().build();
}
@Bean(name = "dataSourceMesOra")
@ConfigurationProperties(prefix = "spring.datasource.mesora")
public DataSource dataSourceMesOra() {
//这种方式的配置默认只满足spring的配置方式,如果使用其他数据连接(druid),需要自己独立获取配置
return DataSourceBuilder.create().build();
}
@Bean(name = "dataSourceMesGP")
@ConfigurationProperties(prefix = "spring.datasource.mesgp")
public DataSource dataSourceMesGP() {
//这种方式的配置默认只满足spring的配置方式,如果使用其他数据连接(druid),需要自己独立获取配置
return DataSourceBuilder.create().build();
}
}
2.数据源代理 注册
@Configuration
public class DataSourceProxyConfig
{
@Autowired
private DataSource dataSourceMysql;
@Autowired
private DataSource dataSourceMesOra;
@Autowired
private DataSource dataSourceMesGP;
@Bean(name="mysqlProxy")
public TransactionAwareDataSourceProxy mysqlProxy(@Qualifier("dataSourceMysql") DataSource dataSource)
{
TransactionAwareDataSourceProxy mysqlProxy = new TransactionAwareDataSourceProxy();
mysqlProxy.setTargetDataSource(dataSourceMysql);
return mysqlProxy;
}
@Bean(name="mesOraProxy")
public TransactionAwareDataSourceProxy mesOraProxy(@Qualifier("dataSourceMesOra") DataSource dataSource)
{
TransactionAwareDataSourceProxy mesOraProxy = new TransactionAwareDataSourceProxy();
mesOraProxy.setTargetDataSource(dataSourceMesOra);
return mesOraProxy;
}
@Bean(name="mesGpProxy")
public TransactionAwareDataSourceProxy mesGpProxy(@Qualifier("dataSourceMesGP") DataSource dataSource)
{
TransactionAwareDataSourceProxy mesGpProxy = new TransactionAwareDataSourceProxy();
mesGpProxy.setTargetDataSource(dataSourceMesGP);
return mesGpProxy;
}
}
3.单个数据源事务管理类
@Configuration
@EnableTransactionManagement
public class MysqlQueryRunnerConfig {
@Autowired
private TransactionAwareDataSourceProxy mysqlProxy;
@Bean(name = "mysqlPlatformTransactionManager")
public PlatformTransactionManager mysqlPlatformTransactionManager() {
return new DataSourceTransactionManager(mysqlProxy);
}
@Bean(name="mysqlQueryRunner")
public QueryRunner mysqlQueryRunnerBean()
{
return new QueryRunner(mysqlProxy);
}
}
4.QueryRunner 就可以使用事务注解了@Transactional
@Service
@Transactional(transactionManager = "mysqlPlatformTransactionManager")
public class MainJobServiceImpl implements MainJobService{
@Autowired
private QueryRunner mysqlQueryRunner;
@Override
public EtlConfD getEtlConfD(String jobName) {
String sql = "select jobName" +
",jobNo" +
",jobDesc" +
",validFlg" +
",runFlg" +
",runStartTimestamp" +
",runEndTimestamp" +
",finalEndTimestamp" +
",queryMinute"+
",etlStartTimestamp" +
",etlEndTimestamp" +
// ",cronValue" +
// ",cronExpression" +
",createUser" +
",createTimestamp" +
",evtUser" +
",evtTimestamp" +
" from etl_conf_d where jobName='" + jobName + "'";
List<EtlConfD> etlConfDList = new ArrayList<>();
try {
etlConfDList = mysqlQueryRunner.query(sql, new BeanListHandler<EtlConfD>(EtlConfD.class));
} catch (Exception e) {
throw new ETLException(ErrorCode.ERROR_MYSQL_SELECT, e);
}
}
}