给我一个spring batch双数据源的例子,H2与DB2,默认指定h2
时间: 2024-03-06 20:48:39 浏览: 18
好的,这是一个简单的Spring Batch双数据源的示例,其中H2是默认数据源,系统表和业务表都将被写入H2数据库:
首先,需要在pom.xml文件中添加以下依赖项:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.ibm.db2</groupId>
<artifactId>db2jcc4</artifactId>
<version>11.5.5.0</version>
</dependency>
<dependency>
<groupId>com.ibm.db2</groupId>
<artifactId>db2jcc_license_cu</artifactId>
<version>11.5.5.0</version>
</dependency>
```
然后,在application.properties文件中配置数据源:
```properties
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
db2.datasource.url=jdbc:db2://localhost:50000/mydb
db2.datasource.driverClassName=com.ibm.db2.jcc.DB2Driver
db2.datasource.username=db2admin
db2.datasource.password=password
```
在配置文件中,我们为H2数据源指定了一个内存地址,并将DB2数据源的详细信息指定为另一个数据源。
然后,我们需要定义两个数据源,一个用于系统表,一个用于业务表。我们可以使用`@Configuration`注释来创建这些数据源:
```java
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "systemDataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource systemDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "businessDataSource")
@ConfigurationProperties(prefix = "db2.datasource")
public DataSource businessDataSource() {
return DataSourceBuilder.create().build();
}
}
```
在这个类中,我们使用`@Primary`注释将系统数据源设置为默认数据源。我们还使用`@ConfigurationProperties`注释来指定数据源的属性。
接下来,我们需要定义两个JdbcTemplate bean来处理这两个数据源:
```java
@Configuration
public class JdbcTemplateConfig {
@Bean(name = "systemJdbcTemplate")
public JdbcTemplate systemJdbcTemplate(@Qualifier("systemDataSource") DataSource systemDataSource) {
return new JdbcTemplate(systemDataSource);
}
@Bean(name = "businessJdbcTemplate")
public JdbcTemplate businessJdbcTemplate(@Qualifier("businessDataSource") DataSource businessDataSource) {
return new JdbcTemplate(businessDataSource);
}
}
```
现在,我们可以在我们的作业或步骤中使用这些JdbcTemplate bean来读取或写入数据:
```java
@Component
public class MyItemWriter implements ItemWriter<MyObject> {
@Autowired
@Qualifier("systemJdbcTemplate")
private JdbcTemplate systemJdbcTemplate;
@Autowired
@Qualifier("businessJdbcTemplate")
private JdbcTemplate businessJdbcTemplate;
@Override
public void write(List<? extends MyObject> items) throws Exception {
for (MyObject item : items) {
// Write to system database (H2)
systemJdbcTemplate.update("INSERT INTO system_table (col1, col2) VALUES (?, ?)", item.getCol1(), item.getCol2());
// Write to business database (DB2)
businessJdbcTemplate.update("INSERT INTO business_table (col1, col2) VALUES (?, ?)", item.getCol1(), item.getCol2());
}
}
}
```
在此示例中,我们使用`@Autowired`注释注入了两个JdbcTemplate bean,并使用它们将数据写入系统表和业务表中。
希望这个例子能够帮助到你。