使用弹簧数据进行弹簧启动批量以不同模式(在内存中:HSQL或H2)写入元数据
我正在使用以下网络编写批处理: Spring Boot运行应用程序:V1.5.3.RELEASE Spring批处理Spring Batch的配置:弹簧一批基础设施V3.0.7.RELEASE 春数据为我的泛型DAO的业务数据库:>弹簧数据的JPA V1.11.3.RELEASE 我的数据源到Oracle datbase是HikariDataSource:使用弹簧数据进行弹簧启动批量以不同模式(在内存中:HSQL或H2)写入元数据
@Qualifier("dataSource")
@Bean(destroyMethod = "close")
@Primary
public HikariDataSource dataSource() throws SQLException {
return buildDataSource();
}
public HikariDataSource buildDataSource() throws SQLException {
HikariDataSource ds = new HikariDataSource();
ds.setMaximumPoolSize(poolSize);
ds.setDriverClassName(driverClassName);
ds.setJdbcUrl(jdbcUrl);
ds.setUsername(userName);
ds.setPassword(password);
ds.setConnectionTestQuery("SELECT 1 from DUAL");
ds.addDataSourceProperty("hibernate.show_sql", showSQL);
ds.addDataSourceProperty("hibernate.use_sql_comments", useSQLComment);
ds.addDataSourceProperty("hibernate.format_sql", formatSQL);
ds.addDataSourceProperty("hibernate.ddl-auto", "none");
return ds;
}
我想写我的元数据在另一个数据库(例如在内存中的HSQL或H2),但我找不到方法,因为上下文写入m eta数据在同一个数据库中。 的唯一方法是定义一个事务管理器和一个EntityManager,并让他们在我的DAO:
@Bean
PlatformTransactionManager businessTransactionManager() throws SQLException {
return new JpaTransactionManager(businessEntityManagerFactory().getObject());
}
@Bean
LocalContainerEntityManagerFactoryBean businessEntityManagerFactory() throws SQLException {
HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
jpaVendorAdapter.setGenerateDdl(true);
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(dataSource());
factoryBean.setJpaVendorAdapter(jpaVendorAdapter);
factoryBean.setPackagesToScan("package.of.business.model", "package.of.business.data");
return factoryBean;
}
,并在我的批量配置我补充一下:
@EnableJpaRepositories(entityManagerFactoryRef = "businessEntityManagerFactory",
transactionManagerRef = "businessTransactionManager", basePackages = {"package.of.business.model",
"package.of.business.data"})
这样,它的工作原理后,我定义的春天在我app.properties默认数据源:
spring.datasource.url=jdbc:h2:mem:test
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.hibernate.ddl-auto=update
我真正想要做的是这样做的正好相反,我想,默认数据库是布西ness one,我想覆盖写入元数据的数据源,但我找不到方法。我甚至尝试做一些针对性的BatchConfigurer:
CustomBatchConfigurer extends DefaultBatchConfigurer
它仅适用于我的元数据后,我禁用我的默认数据源春数据的初始化,但它并不在我的Oracle业务数据库写什么:
batch.data.source.init=false
spring.batch.initializer.enabled=false
spring.batch.initialize.enabled=false
spring.datasource.initialize=false
spring.datasource.continue-on-error=true
有没有人有任何想法如何做到这一点?
你需要一般是通过扩展DefaultbatchConfigurer
创建BatchConfigurer
(的自定义实现,将允许您配置批处理DataSource
明确
在这里你可以在文档中阅读更多关于BatchConfigurer
:。http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/core/configuration/annotation/BatchConfigurer.html