【发布时间】:2018-09-18 13:23:35
【问题描述】:
我正在使用带有 @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
【问题讨论】:
-
你的意思是你覆盖了
DefaultBatchConfigurer#setDataSource(...)? OracleDataSource是如何配置的? H2DataSource是怎么配置的?请发布 appliation.properties 和/或带注释的代码,显示 bean 是如何创建/命名的。 -
@Andrew S 嘿 Andrew,感谢您的建议,是的,我已尝试覆盖
setDataSource并创建DefaultBatchConfigurer类型的 bean。请查看编辑 -
@Qualifier 是否适用于被覆盖的方法?也许尝试调试并设置断点来检查堆栈以查看为什么使用 dataSource 而不是 springBatchDataSource。一切都失败了,也许切换 bean 名称,所以 H2 是 dataSource.
-
@Andrew S 工作正常)似乎是初始化程序中的问题..
标签: java spring spring-boot spring-batch