spring batch 配置需要注意
1、jobRepository 如果引用
org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean
则使用机器内存管理springbatch信息,容易内存溢出。
推荐使用
org.springframework.batch.core.repository.support.JobRepositoryFactoryBean
但是需要手动建库,用于存储springbatch基础信息
2、配置文件:
<bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher"> <property name="jobRepository" ref="jobRepository"/> </bean>
<bean id="jobRepository" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean"> <property name="transactionManager" ref="transactionManager"/> <property name="databaseType" value="MySQL"/> <property name="dataSource" ref="dataSource"/> </bean> <bean id="transactionManager" class="org.springframework.batch.support.transaction.ResourcelessTransactionManager"/> <batch:job id="testJob" restartable="true"> <batch:step id="testStep"> <batch:tasklet transaction-manager="transactionManager" > <batch:chunk reader="itemReader" processor="testProcessor" writer="itemWriter" commit-interval="1"/> <!--<batch:listeners> <batch:listener ref="customStepListener"/> <batch:listener ref="customItemReaderListener" /> <batch:listener ref="customItemWriterListener" /> </batch:listeners>--> </batch:tasklet> </batch:step> </batch:job>
<bean id="itemReader" class="org.mybatis.spring.batch.MyBatisPagingItemReader" scope="step"> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> <property name="pageSize" value="1000"/> <property name="queryId" value="com.jr.gyl.base.pay.app.dao.erp.OpenLinkDao.queryByMutliParams" /> <property name="parameterValues"> <map> <entry key="companyName" value="#{jobParameters['companyName']}"> </entry> <entry key="companyNo" value="#{jobParameters['companyNo']}"> </entry> <entry key="startTime" value="#{jobParameters['startTime']}"> </entry> <entry key="openBank" value="#{jobParameters['openBank']}"> </entry> <entry key="endTime" value="#{jobParameters['endTime']}"> </entry> <entry key="pageSize" value="#{jobParameters['pageSize']}"> </entry> </map> </property> </bean> <bean id="jobBuilderFactory" class="com.jr.gyl.base.pay.app.service.processor.CustomJobBuilderFactory"> <constructor-arg index="0" ref="jobRepository"/> </bean> <bean id="stepBuilderFactory" class="org.springframework.batch.core.configuration.annotation.StepBuilderFactory"> <constructor-arg index="0" ref="jobRepository"/> <constructor-arg index="1" ref="transactionManager"/> </bean> <bean id="testProcessor" class="com.jr.gyl.base.pay.app.service.processor.TestProcessor"></bean> <bean id="itemWriter" class="org.mybatis.spring.batch.MyBatisBatchItemWriter" scope="prototype"> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> <property name="sqlSessionTemplate" ref="sqlSession"/> <property name="statementId" value="com.jr.gyl.base.pay.app.dao.erp.OpenLinkDao.insert"/> </bean>注意itemreader的scope属性要是step
java方法:
Map<String, JobParameter> parameterMap = new HashMap<String, JobParameter>(); if (!StringUtil.isEmpty(accountName)) { //客户名称 parameterMap.put("companyName", new JobParameter(accountName, true)); } if (!StringUtil.isEmpty(companyNo)) { parameterMap.put("companyNo", new JobParameter(companyNo, true)); } if (!StringUtil.isEmpty(begin)) { parameterMap.put("startTime",new JobParameter(begin, true)); } if (!StringUtil.isEmpty(openBank) && !openBank.equals("0")) { parameterMap.put("openBank", new JobParameter(openBank, true)); } String endTime = ""; if (!StringUtil.isEmpty(end)) { Date date = DateUtils.addDays(DateUtils.parseDate(end), 1); endTime = DateUtils.formatDateStyleOne(date); parameterMap.put("endTime", new JobParameter(endTime, true)); } if (p.getPageSize() != null) { parameterMap.put("pageSize", new JobParameter(Long.parseLong(p.getPageSize().toString()), true)); } parameterMap.put("skipNo", new JobParameter(Long.parseLong(p.getPageSize().toString()), true)); parameterMap.put("date.key1", new JobParameter(new Date(), true)); JobParameters parameters = new JobParameters(parameterMap); try { //Start Job JobExecution result = jobLauncher.run(job, parameters); System.out.println("@@@@@@@@@@@@@ "+result.getStatus()); } catch (Exception e) { e.printStackTrace(); }