Jos*_*hua 21 cron spring crontab quartz-scheduler spring-batch
我正在使用带有石英的弹簧批2.2.4在某个时间运行一些工作
问题是作业总是在第一次执行代码后运行,然后根据计划的时间运行.我想停止第一次运行,让它只根据预定的时间运行.
我的cron表达式是"0 0 0**?" 我也试过"0 0 0 1/1*?*",但它仍然会在应用程序启动时执行一次
如何在应用程序启动时停止第一次执行?
这是作业上下文文件:
<batch:job id="exceptionLogJob">
<batch:step id="exceptionLogReadWriteStep">
<batch:tasklet >
<batch:chunk reader="exceptionLogReader" writer="exceptionLogWriter"
commit-interval="1000" />
</batch:tasklet>
</batch:step>
</batch:job>
<!-- ======================================================= -->
<!-- READER -->
<!-- ======================================================= -->
<bean id="exceptionLogReader"
class="org.springframework.batch.item.database.JdbcCursorItemReader">
<property name="dataSource" ref="dataSource" />
<property name="sql" value="SELECT a.*,a.rowid FROM SF_EXCEPTION_LOG a WHERE DATETIME > SYSDATE - 1" />
<property name="rowMapper" ref="ExceptionLogRowMapper" />
</bean>
<!-- ======================================================= -->
<!-- Writer -->
<!-- ======================================================= -->
<bean id="exceptionLogWriter"
class="com.mobily.sf.batchprocessor.exceptionlog.ExceptionLogWriter" />
<bean id="jobDetailExceptionLog" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass"
value="com.sf.batchprocessor.commons.JobLauncherDetails" />
<property name="jobDataAsMap">
<map>
<entry key="jobName" value="exceptionLogJob" />
<entry key="jobLocator" value-ref="jobRegistry" />
<entry key="jobLauncher" value-ref="jobLauncher" />
</map>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetailExceptionLog" />
<property name="cronExpression" value="0 0 0 1/1 * ? *" />
</bean>
</property>
</bean>
</beans>
Run Code Online (Sandbox Code Playgroud)
小智 48
我有同样的问题,并确定它是由Spring boot的自动配置服务引起的.默认情况下,它将在应用程序启动后运行所有已配置的作业Bean.
有两个属性会影响此行为:
spring.batch.job.enabled
spring.batch.job.names
第一个阻止在设置为false时启动所有作业.第二个接受将以逗号分隔的作业名称列表.
这两个属性可以通过Spring启动文档中指定的各种方式设置:
--spring.batch.job.enabled=false
)-Dspring.batch.job.enabled=false
)我猜是一些配置问题。这是我使用相同的 cron 表达式测试的配置。我已经使用以下配置启动了 context.xml 。
<bean class="org.springframework.batch.core.configuration.support.AutomaticJobRegistrar">
<property name="applicationContextFactories">
<bean
class="org.springframework.batch.core.configuration.support.ClasspathXmlApplicationContextsFactoryBean">
<property name="resources">
<list>
<value>classpath*:configurations/kp-batch.xml</value>
</list>
</property>
</bean>
</property>
<property name="jobLoader" >
<bean
class="org.springframework.batch.core.configuration.support.DefaultJobLoader">
<property name="jobRegistry" ref="jobRegistry" />
</bean>
</property>
</bean>
<bean id="jobRegistry"
class="org.springframework.batch.core.configuration.support.MapJobRegistry" />
<bean id="schedule"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger1"/>
</list>
</property>
</bean>
<bean id="cronTrigger1"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="kpJobDetail" />
<property name="cronExpression" value="0 0 0 1/1 * ? *"/>
</bean>
<bean id="kpJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass"
value="com.viasat.nbn.nms.webservices.util.SpringBatchQuartzJobLauncher" />
<property name="jobDataAsMap">
<map>
<entry key="jobName" value="Trigger Job for 12AM" />
<entry key="jobLocator" value-ref="jobRegistry" />
<entry key="jobLauncher" value-ref="jobLauncher" />
</map>
</property>
</bean>
<bean id="batchTransactionManager"
class="org.springframework.batch.support.transaction.ResourcelessTransactionManager">
<property name="rollbackOnCommitFailure" value="false" />
</bean>
<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.MapJobRepositoryFactoryBean">
<property name="transactionManager" ref="batchTransactionManager" />
</bean>
Run Code Online (Sandbox Code Playgroud)
在 kp-batch.xml 中,我定义了作业、itemreader、itemwriter 等。
归档时间: |
|
查看次数: |
18894 次 |
最近记录: |