给我一个spring batch双数据源的例子,H2与DB2,并且在application.yml中 指定默认数据源为h2
时间: 2024-03-31 11:33:53 浏览: 59
好的,这里是一个简单的 Spring Batch 双数据源示例,其中一个数据源是 H2,另一个是 DB2:
首先,需要在 pom.xml 文件中添加以下依赖项:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>com.ibm.db2</groupId>
<artifactId>db2jcc</artifactId>
<version>11.5.0.0</version>
</dependency>
```
接下来,需要在 application.yml 文件中配置双数据源:
```yaml
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:test
username: sa
password:
db2:
datasource:
driver-class-name: com.ibm.db2.jcc.DB2Driver
url: jdbc:db2://localhost:50000/sample
username: db2admin
password: password
```
注意,这里我们将默认数据源设置为 H2 数据库。如果需要在应用程序中使用 DB2 数据库,可以通过 @Qualifier 注解来指定数据源。
下面是一个简单的 Spring Batch 作业,它从 H2 数据库中读取数据,并将其写入到 DB2 数据库中:
```java
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
@Qualifier("dataSource")
private DataSource dataSource;
@Autowired
@Qualifier("db2DataSource")
private DataSource db2DataSource;
@Bean
public ItemReader<User> reader() {
JdbcCursorItemReader<User> reader = new JdbcCursorItemReader<>();
reader.setDataSource(dataSource);
reader.setSql("SELECT id, name FROM users ORDER BY id ASC");
reader.setRowMapper((resultSet, i) -> new User(resultSet.getLong("id"), resultSet.getString("name")));
return reader;
}
@Bean
public ItemWriter<User> writer() {
JdbcBatchItemWriter<User> writer = new JdbcBatchItemWriter<>();
writer.setDataSource(db2DataSource);
writer.setSql("INSERT INTO users (id, name) VALUES (:id, :name)");
writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
return writer;
}
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<User, User>chunk(10)
.reader(reader())
.writer(writer())
.build();
}
@Bean
public Job job() {
return jobBuilderFactory.get("job")
.incrementer(new RunIdIncrementer())
.flow(step1())
.end()
.build();
}
}
```
在这个示例中,我们使用了两个数据源:dataSource 和 db2DataSource。我们使用 @Qualifier 注解将它们分别注入到 ItemReader 和 ItemWriter 中。
请注意,我们将 ItemWriter 的数据源设置为 db2DataSource,以确保写入到正确的数据库中。
希望这个示例对你有所帮助!
阅读全文