[英]Create metadata tables for Spring Batch in an embedded database
我正在使用帶有@EnableBatchProcessing
Spring Boot自動配置的Spring Batch設置。 問題在於它在主數據庫中創建了元數據表,我不希望出現這種情況。 我想將所有Spring Batch信息保存到嵌入式數據庫中。
我嘗試使用spring.batch.initialize-schema=embedded
屬性並將H2添加到類路徑中,用H2數據源覆蓋DefaultBatchConfigurer
bean,替換JobRepository
和JobLauncher
bean,但它會在主Oracle數據庫中不斷創建元數據表。 我正在使用Spring Batch 3.0.8和Spring Boot 1.5.9。
任何幫助表示贊賞,謝謝!
更新 :添加來配置:
H2配置:
@Bean
public DataSource springBatchDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.h2.Driver");
dataSource.setUrl("jdbc:h2:mem:db;DB_CLOSE_DELAY=-1");
dataSource.setUsername("sa");
dataSource.setPassword("sa");
return dataSource;
}
甲骨文:
@Bean
@Primary
public DataSource dataSource() throws SQLException {
PoolDataSourceImpl dataSource = new PoolDataSourceImpl();
dataSource.setConnectionFactoryClassName(environment.getRequiredProperty("db.driverClassName"));
dataSource.setURL(environment.getRequiredProperty("db.url"));
dataSource.setUser(environment.getRequiredProperty("db.username"));
dataSource.setPassword(environment.getRequiredProperty("db.password"));
dataSource.setFastConnectionFailoverEnabled(Boolean.valueOf(environment
.getRequiredProperty("db.fast.connect.failover.enabled")));
dataSource.setValidateConnectionOnBorrow(true);
dataSource.setSQLForValidateConnection("SELECT SYSDATE FROM DUAL");
dataSource.setONSConfiguration(environment.getRequiredProperty("db.ons.config"));
dataSource.setInitialPoolSize(Integer.valueOf(environment.getRequiredProperty("db.initial.pool.size")));
dataSource.setMinPoolSize(Integer.valueOf(environment.getRequiredProperty("db.min.pool.size")));
dataSource.setMaxPoolSize(Integer.valueOf(environment.getRequiredProperty("db.max.pool.size")));
dataSource.setAbandonedConnectionTimeout(120);
dataSource.setInactiveConnectionTimeout(360);
dataSource.setTimeToLiveConnectionTimeout(0);
return dataSource;
}
批量配置:
@Configuration
@EnableBatchProcessing
public class BatchConfigurer extends DefaultBatchConfigurer {
@Override
@Autowired
public void setDataSource(@Qualifier("springBatchDataSource") DataSource dataSource) {
super.setDataSource(dataSource);
}
}
和一些相關的屬性
spring:
batch:
job.enabled: false
1.重新定義BasicBatchConfigurer
2.在spring-boot-batch-starter中,您必須創建自己的BatchDataSourceInitializer ,以便它將執行init sql腳本
@Configuration
public class MyBatchConfigurer {
@Bean
public BasicBatchConfigurer batchConfigurer(BatchProperties properties,
@Qualifier("springBatchDataSource") DataSource dataSource,
ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
return new BasicBatchConfigurer(properties, dataSource,
transactionManagerCustomizers.getIfAvailable());
}
@Bean
public BatchDataSourceInitializer batchDataSourceInitializer(@Qualifier("springBatchDataSource") DataSource dataSource,
ResourceLoader resourceLoader, BatchProperties properties) {
return new BatchDataSourceInitializer(dataSource, resourceLoader,
properties);
}
}
您需要限定H2數據源bean
@Bean(name = "springBatchDataSource")
public DataSource springBatchDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.h2.Driver");
dataSource.setUrl("jdbc:h2:mem:db;DB_CLOSE_DELAY=-1");
dataSource.setUsername("sa");
dataSource.setPassword("sa");
return dataSource;
}
希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.