Spring批处理拥有自己的数据库架构 我的应用程序拥有自己的数据库架构。
我想将这些分隔成不同的数据库,因此弹出批处理表不在我的应用程序数据库中。
默认情况下,spring-boot仅支持与单个数据库的连接。如何配置它以便所有与spring-batch相关的操作进入spring-batch数据库并且我自己的所有代码都进入我的应用程序数据库?
我使用的是最新的spring-boot 1.2.2。
答案 0 :(得分:3)
这就是我做到的。
在application.properties
中### Database Details
datasource.app.driverClassName=oracle.jdbc.driver.OracleDriver
datasource.app.url=jdbc:oracle:thin:@//localhost:1521/xe
datasource.app.username=YOUR_APP_DB_USERNAME
datasource.app.password=YOUR_PASSWORD
datasource.batch.driverClassName=oracle.jdbc.driver.OracleDriver
datasource.batch.url=jdbc:oracle:thin:@//localhost:1521/xe
datasource.batch.username=YOUR_BATCH_DB_USERNAME
datasource.batch.password=YOUR_PASSWORD
在你的@Configuration
课程中添加以下bean
@Primary
@Bean
@ConfigurationProperties(prefix = "datasource.app")
public DataSource appDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "datasource.batch")
public DataSource batchDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public JobLauncher jobLauncher() throws Exception {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository());
return jobLauncher;
}
@Bean
public JobRepository jobRepository() throws Exception {
DataSourceTransactionManager batchTransactionManager = new DataSourceTransactionManager();
batchTransactionManager.setDataSource(batchDataSource());
JobRepositoryFactoryBean jobRepositoryFactoryBean = new JobRepositoryFactoryBean();
jobRepositoryFactoryBean.setTransactionManager(batchTransactionManager);
jobRepositoryFactoryBean.setDatabaseType("ORACLE");
jobRepositoryFactoryBean.setIsolationLevelForCreate("ISOLATION_DEFAULT");
jobRepositoryFactoryBean.setDataSource(batchDataSource());
jobRepositoryFactoryBean.afterPropertiesSet();
return jobRepositoryFactoryBean.getObject();
}