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

在spring-boot-batch项目中,对jobrepository使用不同的数据源是否可能?

胡弘毅
2023-03-14

只需使用spring-data-jpa设置我的第一个spring-boot-batch项目。在我的开发环境中,我有一个可行的解决方案,即在itemReader中使用来自Oracle DB的一些行,在处理器中为每一行解析一些XML/html,然后使用自定义ItemWriter将每个提取的html写入单个文件。(每行1个文件)

我的数据源是通过引导项目(application.properties)中的spring-data-jpa配置的...

我尝试配置了2个数据源,正如我遇到的spring文档中概述的那样…但不能让它工作。我也尝试使用内存,但也无法使其工作。

那么这可能吗?或者我应该继续努力让内存中的作业repo工作?

在这一点上,我不太关心可重启性..批处理作业将作为独立的spring-boot应用程序在我的桌面上运行。

任何帮助,提示,信息都非常感谢。

   @Configuration
@EnableBatchProcessing
public class BatchConfiguration {


    private static final Logger log = LoggerFactory.getLogger(BatchConfiguration.class);


    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    @Autowired
    EntityManagerFactory emf;

    @Bean
    public SimpleJobLauncher jobLauncher(JobRepository jobRepository) {
        SimpleJobLauncher simpleJobLauncher = new SimpleJobLauncher();
        simpleJobLauncher.setJobRepository(jobRepository);
        return simpleJobLauncher;
    }

    @Bean
    public JobRepository jobRepository(ResourcelessTransactionManager transactionManager) throws Exception {
        MapJobRepositoryFactoryBean mapJobRepositoryFactoryBean = new MapJobRepositoryFactoryBean(transactionManager);
        mapJobRepositoryFactoryBean.setTransactionManager(transactionManager);
        return mapJobRepositoryFactoryBean.getObject();
    }

    @Bean
    public ResourcelessTransactionManager transactionManager() {
        return new ResourcelessTransactionManager();
    }

因此,它似乎仍然试图连接到Oracle,而不使用内存中的数据库。

共有1个答案

咸昀
2023-03-14

嗯...似乎这个配置对我的情况很有用。

@Configuration
@EnableBatchProcessing
public class BatchConfiguration {


    private static final Logger log = LoggerFactory.getLogger(BatchConfiguration.class);


    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    @Autowired
    EntityManagerFactory emf;

    @Bean
    public SimpleJobLauncher jobLauncher(JobRepository jobRepository) throws Exception {
        SimpleJobLauncher simpleJobLauncher = new SimpleJobLauncher();
        simpleJobLauncher.setJobRepository(jobRepository);
        simpleJobLauncher.afterPropertiesSet();
        return simpleJobLauncher;
    }

    @Bean
    public MapJobRepositoryFactoryBean mapJobRepositoryFactory(ResourcelessTransactionManager txManager)
            throws Exception {
        MapJobRepositoryFactoryBean factory = new MapJobRepositoryFactoryBean(txManager);
        factory.afterPropertiesSet();
        return factory;
    }

    @Bean
    public JobRepository jobRepository(MapJobRepositoryFactoryBean factory) throws Exception {
         return factory.getObject();
    }

    @Bean
    public ResourcelessTransactionManager  resourcelessTransactionManager() {
        return new ResourcelessTransactionManager();
    }

    @Bean
    public JobExplorer jobExplorer(MapJobRepositoryFactoryBean factory) {
        return new SimpleJobExplorer(factory.getJobInstanceDao(), factory.getJobExecutionDao(),
                factory.getStepExecutionDao(), factory.getExecutionContextDao());
    }
 类似资料:
  • null 如何使用Spring Batch配置JTA/XA事务(Atomikos)?

  • 但是,在我的项目中,我希望我的业务逻辑能够访问数据源,但我希望Spring Batch不使用数据源。这可能吗? 这个家伙也有类似的问题:Spring boot+Spring batch没有DataSource

  • 如果我有两个作业,每个作业都写入不同的数据源,那么在它使用的数据源中写入Spring批处理元数据(jobExecution、结果、...)是有意义的。然而,Spring批处理似乎指示您有一个“主要”数据源用于该元数据。 我定义了两个数据源,都没有标记为主数据源,应用程序无法启动: 我尝试创建两个配置,每个配置都扩展DefaultBatchConfigrer: 另一个完全相同,只是工作和数据源不同。

  • 我正在开发一个与spring Batch集成的Spring Boot应用程序。当我使用具有以下数据源属性的独立Spring Boot应用程序时,它工作得很好。但是当我将spring批处理集成到应用程序时,它会产生错误。 我试图通过作业配置中的moveToQueryStep()调用DbServiceImpl中的getCode()。我可以在dbserviceimpl.java“initialize”方

  • 问题内容: 我有两个名为simple-core-impl和的项目simple-core-web。 这两个项目都是,spring based并且都具有一个父项目名称simple-core。 我simple-impl-config.xml在simple-core-impl项目simple-web-config.xml中simple-impl-config.xml。 我有一个具有类的bean:simpl

  • 当使用Spring Batch Admin时,它会尝试为dataSource、transactionManager等提供一些默认值。 如果您想覆盖这些默认值,您可以在META-INF/Spring/批/servlet/overder/文件夹下创建自己的xml bean定义,并且在引导期间它保证将覆盖默认属性。 在spring batch admin中,数据源默认值是在数据源上下文中定义的。使用此定