I am using oracle weblogic server 10.3
my job-launcher-context.xml looks like
Code:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:batch="http://www.springframework.org/schema/batch"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schem...-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schem...ng-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schem...ing-tx-2.5.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schem...ng-jee-2.0.xsd
http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.1.xsd" >
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/oracledb" />
<bean id="transactionManager"
class="org.springframework.transaction.jta.WebLogicJtaTransactionManager">
<property name="allowCustomIsolationLevels" value="true" />
<property name="defaultTimeout" value="12000" />
</bean>
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
<property name="taskExecutor" ref="taskExecutor" />
</bean>
<bean id="taskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor" />
<bean
class="org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor">
<property name="jobRegistry" ref="jobRegistry" />
</bean>
<bean id="jobRepository"
class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean"
p:dataSource-ref="dataSource" p:transactionManager-ref="transactionManager" >
</bean>
<bean id="jobRegistry"
class="org.springframework.batch.core.configuration.support.MapJobRegistry" />
<bean id="jobOperator"
class="org.springframework.batch.core.launch.support.SimpleJobOperator"
p:jobLauncher-ref="jobLauncher" p:jobExplorer-ref="jobExplorer"
p:jobRepository-ref="jobRepository" p:jobRegistry-ref="jobRegistry" />
<bean id="jobExplorer"
class="org.springframework.batch.core.explore.support.JobExplorerFactoryBean"
p:dataSource-ref="dataSource" />
<batch:job id="globalParentleJob" abstract="true">
<batch:listeners>
<batch:listener ref="listener"/>
</batch:listeners>
</batch:job>
</beans>
All my jobs are child jobs of this global parent job.
Global parent job has only job level listener which updates my intermediate tables using iBatis SQL. iBatis using different data source.
My Job file looks like
Code:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/batch"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
<job id="MyJob" restartable="true" parent="globalParentleJob">
<step id="RuleValidation">
<tasklet ref="ruleTasklet">
<listeners>
<listener ref="promotionListener" />
</listeners>
</tasklet>
<next on="INC" to="Inc" />
<next on="ITEMIDENTIFICATION" to="ItemIdentification" />
<end on="COMPLETED" />
</step>
<step id="Inc">
<tasklet ref="incTasklet">
<listeners>
<listener ref="promotionListener" />
</listeners>
</tasklet>
<next on="CONTINUEIDE" to="ItemIdentification" />
<end on="COMPLETED" />
</step>
<step id="ItemIdentification" next="limitDecider">
<tasklet ref="itemIdentificationTasklet">
<listeners>
<listener ref="promotionListener" />
</listeners>
</tasklet>
</step>
<decision decider="limitDecision" id="limitDecider">
<next on="CONTINUE" to="ItemIdentification" />
<next on="CONTINUEINC" to="Incremental" />
<next on="COMPLETED" to="SaveItemPartition" />
</decision>
<step id="stemPartition" parent="master">
<next on="TEST" to="MoveItemRecord" />
<next on="COMMITORINCREMENTAL" to="InspectTargetCharVal" />
</step>
<step id="InspectTargetCharVal" next="MoveItemRecord">
<tasklet ref="targetCharValTasklet" />
</step>
<step id="MoveItemRecord">
<tasklet ref="moveItemTasklet"></tasklet>
<next on="STAT-CONTINUE" to="StatisticsProcess" />
<end on="COMPLETED" />
</step>
<step id="StatisticsProcess" next="WkspcDelProcess">
<tasklet ref="ruleStatsTasklet"></tasklet>
</step>
<!-- Deleting from wkspc table -->
<step id="WkspcDelProcess">
<tasklet ref="wkspcDelTasklet" />
<next on="INCREMENTAL" to="ExecuteReports" />
<end on="COMPLETED" />
</step>
<step id="ExecuteReports">
<tasklet ref="executeCognosReport"></tasklet>
</step>
</job>
<step id="SaveItem">
<tasklet>
<chunk reader="itemAssignmentReader" writer="itemAssignmentWriter"
commit-interval="50"></chunk>
</tasklet>
</step>
<beans:bean id="ruleSetTasklet" scope="step"
class="com.service.batch.itemassignment.AssignmentRequestValidatorTasklet">
</beans:bean>
<beans:bean id="itemIdentificationTasklet"
class="com.service.batch.itemassignment.AssignmentProcTasklet"
scope="step">
<beans:property name="dataSource" ref="dataSource" />
</beans:bean>
<beans:bean id="incrementalTasklet"
class="com.service.batch.itemassignment.IncrementalTasklet"
scope="step">
</beans:bean>
<beans:bean id="promotionListener"
class="org.springframework.batch.core.listener.ExecutionContextPromotionListener"
scope="step">
<beans:property name="keys"
value="minValue,maxValue,factor,totalCnt,iterateValue,loopValue,rulesetIdList,ruleSetiterateValue,ruleSetloopValue,increRuleset,sourceSystemId" />
</beans:bean>
<beans:bean id="itemAssignmentReader"
class="com.service.batch.itemassignment.AssignmentJdbcItemReader"
scope="step">
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="sql">
<beans:value>
<![CDATA[
SELECT colum
FROM table
filter
]]>
</beans:value>
</beans:property>
<beans:property name="rowMapper">
<beans:bean
class="com.service.batch.itemassignment.AssignmentRowMapper" />
</beans:property>
</beans:bean>
<beans:bean id="itemAssignmentWriter"
class="com.service.batch.itemassignment.AssignmentWriter"
scope="step">
<beans:property name="appService" ref="itemAssignmentAppService" />
</beans:bean>
<beans:bean id="ruleStatsTasklet"
class="com.service.batch.itemassignment.RuleStatsTasklet"
scope="step">
</beans:bean>
<beans:bean id="targetCharValTasklet"
class="com.service.batch.itemassignment.TargetCharValTasklet"
scope="step">
</beans:bean>
<beans:bean id="wkspcDelTasklet"
class="com.service.batch.itemassignment.WkspcDelTasklet"
scope="step">
</beans:bean>
<beans:bean id="executeCognosReport" scope="step"
class="com.service.batch.itemassignment.ExecuteCognosReport">
</beans:bean>
<beans:bean id="limitDecision"
class="com.service.batch.itemassignment.LimitDecider">
</beans:bean>
<beans:bean id="itemAssignmentAppService"
class="com.service.itemassignment.ItemAssignmentAppService" />
<beans:bean id="moveItemTasklet"
class="com.service.batch.itemassignment.MoveProcTasklet"
scope="step">
<beans:property name="dataSource" ref="dataSource" />
</beans:bean>
<beans:bean id="master"
class="com.service.batch.itemassignment.ItemAssignmentPartitionStep">
<beans:property name="jobRepository" ref="jobRepository" />
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="step" ref="SaveItem" />
<beans:property name="stepExecutionSplitter">
<beans:bean
class="org.springframework.batch.core.partition.support.SimpleStepExecutionSplitter">
<beans:constructor-arg ref="jobRepository" />
<beans:constructor-arg ref="SaveItem" />
<beans:constructor-arg>
<beans:bean
class="com.service.batch.itemassignment.ItemAssignmentRangePartitioner"
scope="step">
<beans:property name="dataSource" ref="dataSource" />
</beans:bean>
</beans:constructor-arg>
</beans:bean>
</beans:property>
<beans:property name="partitionHandler">
<beans:bean
class="org.springframework.batch.core.partition.support.TaskExecutorPartitionHandler">
<beans:property name="taskExecutor" ref="taskExecutor" />
<beans:property name="step" ref="SaveItem" />
<beans:property name="gridSize" value="3" />
</beans:bean>
</beans:property>
</beans:bean>
</beans:beans>