java在嵌入式数据库中为Spring批处理创建元数据表
我正在使用带有@EnableBatchProcessing
的Spring Boot自动配置的Spring批处理设置。问题是它在主数据库中创建元数据表,我不希望出现这种行为。我想将所有Spring批处理信息保存到一个嵌入式数据库中
我尝试使用spring.batch.initialize-schema=embedded
属性并将H2添加到类路径中,用H2数据源覆盖DefaultBatchConfigurer
bean,替换JobRepository
和JobLauncher
bean,但它不断在主Oracle数据库中创建元数据表。我使用的是SpringBatch 3.0.8和SpringBoot 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 楼答案
您需要验证H2数据源bean
我希望这能有所帮助
# 2 楼答案
一,。重新定义基本batchconfigurer
二,。在spring boot batch starter中,您必须创建自己的BatchDataSourceInitializer,这样它将执行init sql脚本