当前位置: 首页 > 知识库问答 >
问题:

使用Spring数据的Spring Boot批处理以不同的模式写入元数据(内存中:HSQL或H2)

范承志
2023-03-14

我正在使用以下技术编写批处理: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

有人知道怎么做吗?

共有1个答案

丁弘新
2023-03-14

您需要创建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