我配置了一个spring批处理作业,它在spring WebService中运行。这项工作有几个步骤。我已经在不同的tomcats中部署了这个webservice的两个实例(但两个实例都使用相同的mysql数据库)。
我希望用不同的参数在两个tomcats中同时运行spring批处理作业(每个tomcats中一个)。我没有使用分区,每个作业的参数是完全不同的。
我开始工作在一个汤姆猫和一切看起来很好。但当我在第二个tomcat中启动第二个作业时,该作业虽然创建了,但它没有启动,甚至没有执行第一步的第一行od代码。
我不是使用spring批处理的专家,所以也许我做错了什么。但是如果spring批处理作业在两个单独的tomcat实例中运行,它们应该并行运行?
这是作业配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:batch="http://www.springframework.org/schema/batch"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/batch
http://www.springframework.org/schema/batch/spring-batch-3.0.xsd">
<job id="uploadProjectDataJobNormal " xmlns="http://www.springframework.org/schema/batch">
<step id="setupProject" next="loadReferenceBuilds">
<tasklet ref="projectSetupTasklet"/>
<listeners>
<listener ref="promotionListener"/>
<listener ref="snpAwareStepListener"/>
<listener ref="snpAwareItemReadListener"/>
</listeners>
</step>
<step id="loadReferenceBuilds" next="snpToMorph">
<tasklet>
<chunk reader="faiReader" processor="faiProcessor" writer="faiWriter" commit-interval="100"/>
</tasklet>
<listeners>
<listener ref="promotionListener"/>
<listener ref="snpAwareStepListener"/>
<listener ref="snpAwareItemReadListener"/>
</listeners>
</step>
<step id="snpToMorph" next="indelToMorph">
<tasklet>
<chunk reader="snpReader" processor="snpProcessor" writer="snpWriter" commit-interval="100"/>
</tasklet>
<listeners>
<listener ref="promotionListener"/>
<listener ref="snpAwareStepListener"/>
<listener ref="snpAwareItemReadListener"/>
</listeners>
</step>
<step id="indelToMorph">
<tasklet>
<chunk reader="indelReader" processor="indelProcessor" writer="indelWriter" commit-interval="100"/>
</tasklet>
<listeners>
<listener ref="promotionListener"/>
<listener ref="snpAwareStepListener"/>
<listener ref="snpAwareItemReadListener"/>
</listeners>
</step>
<listeners>
<listener ref="snpAwareBatchJobListener"/>
</listeners>
</job>
这是我开始作业的方式:
作业参数有一些在两个作业之间是唯一的参数,比如日期,我要上载的元素的名称。
作业存储库和启动程序按以下方式配置:
/**
* Job repository.
*
* @return the job repository.
* @throws Exception in case the job repository could not be created.
*/
@Bean
public JobRepository jobRepository() throws Exception {
JobRepositoryFactoryBean jobRepositoryFactory = new JobRepositoryFactoryBean();
jobRepositoryFactory.setDataSource(this.persistenceConfig.dataSource());
jobRepositoryFactory.setTransactionManager(this.persistenceConfig.transactionManager());
jobRepositoryFactory.setIsolationLevelForCreate("ISOLATION_DEFAULT");
return jobRepositoryFactory.getJobRepository();
}
/**
* Job launcher.
*
* @return the job launcher.
* @throws Exception in case the job launcher could not be created.
*/
@Bean
public JobLauncher jobLauncher() throws Exception {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(this.jobRepository());
jobLauncher.setTaskExecutor(this.taskExecutor());
return jobLauncher;
}
/**
* Task executor.
*
* @return the task executor.
*/
@Bean
public TaskExecutor taskExecutor() {
SimpleAsyncTaskExecutor ex = new SimpleAsyncTaskExecutor();
ex.setConcurrencyLimit(1);
return ex;
}
更新:我想过的一个解决方案是创建另一个名称如“UploadProjectDataJobNormal2”的第二个作业声明。那有帮助吗?
我们的要求是同时写多个文件。我们正在使用spring批处理来编写文件,并且我们正在从不同的线程中启动spring批处理。每个线程都有自己的应用程序上下文。因此我们可以确保单例bean不会跨多个线程共享。下面是我的代码片段。 这就是我们调用spring批处理的方式。 ThreadPoolExecutor TPE=new ThreadPoolExecutor(10,10,1000000,TimeUni
使用spring batch/spring boot,是否可以在每个线程中使用不同的多次启动具有读取器、处理器和写入器的spring batch作业? 我的用例: 我有许多不同的文件夹,我需要观看。如果新文件进入一个文件夹,我需要调用该作业,并在作业处理期间锁定该文件夹。 这可能发生在不同数量的文件夹中,这就是为什么我需要一个spring批处理作业的多个实例,但每次使用不同的。 每个文件夹一个作业
我是冲刺批次的新手,我找不到问题的答案。 我正在尝试使用Spring引导和Spring批处理实现JOB。我的JOB需要一个参数,所以我像这样执行应用程序: java-jar-Dspring。配置文件。活动=gus/应用程序/botbit批处理/botbit-batch-1.0.0。jar——Spring。一批工作名称=persistCustomerSuccessMetrics日期=2015年12月
在表中,默认情况下传递和作业参数。当我使用REST endpoint launcher方法触发作业时,我没有看到这些参数在默认情况下被传递。 并且在每个作业运行中传递这两个参数的相同值。和。正如所料,它给出了以下异常。 我的问题是: 当我使用命令行触发作业时,为什么默认情况下传递此和作业参数? ,为什么每次运行作业时传递的两个参数的值都是一样的?即使我正在使用 方法是如何创建差异的?
Spring批处理-需要帮助以并行和多个节点运行批处理作业的独立步骤。一个spring批处理作业(JobA),包含三个步骤[步骤A(在compute1中)和步骤B(在compute2中)以及步骤C] StepA和StepB是独立的步骤,占用大量内存,因此不能在同一计算节点/JVM上并行运行。要使StepC同时启动(StepA和StepB),需要成功完成。我不想为了节省时间而依次执行步骤A和步骤B。
如果我有两个作业,每个作业都写入不同的数据源,那么在它使用的数据源中写入Spring批处理元数据(jobExecution、结果、...)是有意义的。然而,Spring批处理似乎指示您有一个“主要”数据源用于该元数据。 我定义了两个数据源,都没有标记为主数据源,应用程序无法启动: 我尝试创建两个配置,每个配置都扩展DefaultBatchConfigrer: 另一个完全相同,只是工作和数据源不同。