给我一个spring batch双数据源的例子,H2与DB2,并且在application.yml中 指定默认数据源为h2
时间: 2024-03-31 18:33:55 浏览: 163
好的,以下是一个使用Spring Batch实现双数据源读写的例子,其中一个数据源使用H2,另一个数据源使用DB2。
首先,在application.yml中指定默认数据源为H2:
```
spring:
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
username: sa
password:
jpa:
hibernate:
ddl-auto: create-drop
properties:
hibernate:
dialect: org.hibernate.dialect.H2Dialect
```
接着,在配置类中定义两个数据源和事务管理器:
```java
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.h2")
public DataSource h2DataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource.db2")
public DataSource db2DataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public PlatformTransactionManager db2TransactionManager() {
return new DataSourceTransactionManager(db2DataSource());
}
@Bean
public PlatformTransactionManager h2TransactionManager() {
return new DataSourceTransactionManager(h2DataSource());
}
}
```
然后,在Job中使用两个数据源:
```java
@Autowired
@Qualifier("db2DataSource")
private DataSource db2DataSource;
@Autowired
@Qualifier("h2DataSource")
private DataSource h2DataSource;
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<Person, Person>chunk(10)
.reader(reader(db2DataSource))
.processor(processor())
.writer(writer(h2DataSource))
.transactionManager(h2TransactionManager())
.build();
}
@Bean
public Step step2() {
return stepBuilderFactory.get("step2")
.<Person, Person>chunk(10)
.reader(reader(h2DataSource))
.processor(processor())
.writer(writer(db2DataSource))
.transactionManager(db2TransactionManager())
.build();
}
```
在上面的例子中,我们将读取器(reader)和写入器(writer)分别设置为不同的数据源,并为每个步骤配置不同的事务管理器。
注意:为了简化示例,省略了Person对象的定义和reader、processor、writer的具体实现。
阅读全文