我对Spring批处理和Spring一般都是新手。我正在开发一个将在WebSphere Application Server上运行的批处理作业。到目前为止,我只是用一些假的台阶搭建了一个骷髅。我还有一个监听器,用于在作业结束时更新一些Oracle DB表。以下是我的AppContext的一部分:
<batch:job id="spedizioneJob" restartable="true" parent="bankitJob">
<batch:step id="verifyInputStep" next="technicalPropertiesEnforcementStep">
<batch:tasklet ref="verifyInput" />
</batch:step>
<batch:step id="technicalPropertiesEnforcementStep" next="protocolAndProbatoryStep">
<batch:tasklet ref="technicalPropertiesEnforcement" />
</batch:step>
<batch:step id="protocolAndProbatoryStep" next="exdiSendingStep">
<batch:tasklet ref="protocolAndProbatory" />
</batch:step>
<batch:step id="exdiSendingStep">
<batch:tasklet ref="exdiSending" />
</batch:step>
<batch:listeners merge="true">
<batch:listener ref="spedizioneJobListener" />
</batch:listeners>
</batch:job>
下面是afterJob代码段的开头:
public void afterJob(JobExecution jobExecution) {
// get params
String iref = jobExecution.getJobParameters().getString("APPL_REQ_ID");
SpedizioneInput spInput=(SpedizioneInput)jobExecution.getExecutionContext().get("input");
奇怪的是,在我的一些测试运行中(Rational Application Developer上的本地测试环境,但同样的情况发生在WAS的服务器上),通常不是第一次,没有找到作业执行,我得到了这个异常:
[03/10/14 12.47.48:505 CEST] 0000003a AbstractJob E org.springframework.batch.core.job.AbstractJob execute Encountered fatal error executing job
org.springframework.batch.core.repository.dao.NoSuchObjectException: Invalid JobExecution, ID 224 not found.
at org.springframework.batch.core.repository.dao.JdbcJobExecutionDao.updateJobExecution(JdbcJobExecutionDao.java:218)
at org.springframework.batch.core.repository.support.SimpleJobRepository.update(SimpleJobRepository.java:160)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:600)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at $Proxy36.update(Unknown Source)
at org.springframework.batch.core.job.AbstractJob.updateStatus(AbstractJob.java:416)
at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:299)
at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:135)
at java.lang.Thread.run(Thread.java:736)
我不知道这是不是和我处理工作的方式有关....我配置了这样一种发射器:
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
<property name="taskExecutor">
<bean class="org.springframework.core.task.SimpleAsyncTaskExecutor" />
</property>
</bean>
try {
System.out.println("Before launching spedizione job");
JobExecution jexec=jobLauncher.run(job, jpb.toJobParameters());
System.out.println("After launching spedizione job "+jexec.getJobConfigurationName()+" status "+jexec.getStatus().toString());
正如Michael所建议的,问题出在我所使用的事务管理器上。当我切换到WebSphereUowTransactionManager时,我解决了我的问题。http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/jta/websphereuowtransactionmanager.html
问题内容: 试图使用es6在没有多个处理程序的情况下创建动态状态,但我陷入了困境。我不知道下面的代码有什么问题 我检查了我的其他函数,handleAdvancePrice是罪魁祸首,但是出了什么问题? 问题答案: 罪魁祸首是后面的多余迹象。另外,也不需要使用单独的; y,因为您可以直接使用
问题内容: 我的错误: 我常见的数据库连接类: 每笔交易我都会参考此类并进行提取和CRUD操作。我的代码有什么问题吗? 问题答案: 您打开了很多连接,这就是问题所在。我认为在您的代码中,您没有关闭打开的连接。 数据库反弹可能会暂时解决,但在您连续执行时会重新出现。另外,还应验证到数据库的并发连接数。如果达到最大DB进程参数,这是常见症状。 此线程的礼貌:https : //community.or
我使用Spring批处理管理来管理和监视作业和执行。如何调用一个作业并从一个独立的java应用程序启动它,该应用程序具有到包含Spring Batch Admin WebApp的服务器的给定HTTP连接。 谢谢你的帮助
我有一个关于Spring的ApplicationListener在父上下文和子上下文方面的性质的问题。假设您创建了一个父上下文,它创建了一个bean,该bean是一个单例,并注册为ApplicationListener。然后,使用父上下文创建子上下文。关闭子上下文时,Spring将发送ContextClosedEvent。该事件是否也会传播到父上下文,从而导致作为ApplicationListen
我有一个自定义跳过管理步骤。我定义了一个跳过策略,其源代码如下: 我的Skip侦听器如下: 我的步骤定义如下: 我想跳过一个约束冲突异常。但是,不会调用侦听器或跳过策略。
在终端上,我得到了这个错误:$./asadmin start-domain domain1 找不到默认的域目录。此系统属性没有值:com.sun.aas.domainsroot命令启动-域失败。 在Eclipse上,我得到了这个运行时异常:在Felix平台上启动GlassFish 玻璃鱼4 拜托,你知道怎么解决这个问题吗?