我正在使用以下技术编写批处理:Spring Boot来运行应用程序:V1.5.3。RELEASE Spring Batch with Spring Batch Config: spring-batch-架构体系V3.0.7。将我的通用DAO的Spring Data发布到业务数据库:
@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中),但我找不到方法,因为上下文正在同一个数据库中写入元数据。唯一的方法是定义TransactionManager和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.html" target="_blank">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"})
这样,它的工作原理后,我定义Spring默认数据源在我的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
我真正想做的恰恰相反,我希望默认数据库是业务数据库,我希望覆盖写入元数据的数据源,但我找不到方法。我甚至试着做一个定制的批处理配置程序:
CustomBatchConfigurer extends DefaultBatchConfigurer
在我禁用默认数据源的spring数据初始化后,它只适用于我的元数据,但它不会在我的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
有人知道怎么做吗?
您需要创建BatchConfigurer
的自定义实现(通常通过扩展DefaultbatchConfigurer
),这将允许您显式配置批数据源。
您可以在这里阅读有关留档中的
BatchConfigrer
的更多信息:http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/core/configuration/annotation/BatchConfigurer.html
我的应用程序中有一个连接到Oracle数据库的数据源。是否可以通过此数据源访问另一个包含Spring批处理元数据表的模式?此数据源的用户拥有访问其他架构的所有权限。 我已经尝试过JobRepository的“tablePrefix”属性,例如“Schema.batch\u0”。但它不起作用。简单地说,我搜索告诉Spring批处理访问元数据表的方法,如“select….from Schema.bat
我使用Spring批处理从Oracle数据库读取数据并将结果写入CSV文件。 我还需要将spring批处理元数据表与oracle数据库分开,为此,我在批处理配置中配置了两个不同的数据源(spring批处理元数据的内存数据库)。 这是我的代码: 批处理配置。JAVA 然后我的itemReader bean看起来像: 当我运行批处理时,一切正常。 但是当我尝试在我的BatchApplication中添
我正在创建一个微服务,在我们的数据库上运行一些非常简单的批处理作业。我遇到了一个问题,Spring Batch在运行作业之前寻找自己的表,它们不存在,我不希望它们存在。 我尝试了许多在stackoverflow上找到的方法,但都没有成功。 我尝试使用不同的数据源,一个指向包含业务数据的实际数据库,另一个指向内存中的h2数据库。在这种情况下,我会得到“没有正在进行的事务”或定义了多个数据源bean(
现在我的问题是 < li >如何更改相应的Job和JobInstance JAVA类以及所有相关的CRUD以反映上述更改。我假设我需要扩展Job和JobInstance的新类,比如AppJob和AppJobInstance。还要扩展JobInstanceDao,比如AppJobInstanceDao。然后将其挂接到JPA存储库等。,我需要扩展JobRepositoryFactoryBean,主要是
我正在编写Spring批的Spring Boot应用程序,其中ItemReader从Oracle数据库读取数据并将数据写入postgres sql,但我得到了以下错误 我不想创建spring批处理元数据表,我的应用程序不需要监视作业,请就此向我提出建议。提前谢谢!!
我试图在spring batch admin中使用mysql数据库,而不是默认的HSQL。根据文件 http://docs.spring.io/spring-batch-admin/reference/reference.xhtml和使用jndi数据源与Spring批处理管理 我复制了to并将其配置值从 到 下面是我的完整配置。 我还尝试应对数据源环境。xml到同一个文件夹,并将其配置更改为mys