gpt4 book ai didi

spring - 执行代码时如何阻止 Spring 批处理计划作业在第一次运行?

转载 作者:IT老高 更新时间:2023-10-28 13:49:02 26 4
gpt4 key购买 nike

我正在使用带有 quartz 的 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>

最佳答案

我遇到了同样的问题,确定是Spring boot的自动配置服务引起的。默认情况下,它将在应用程序启动后运行所有配置的作业 bean。

有两个属性会影响此行为:

  • spring.batch.job.enabled
  • spring.batch.job.names

第一个设置为 false 时会阻止启动所有作业。第二个接受将要运行的以逗号分隔的作业名称列表。

这两个属性可以通过Spring boot docs 中指定的多种方式设置。 :

  1. 命令行 (--spring.batch.job.enabled=false)
  2. Java 系统属性 (-Dspring.batch.job.enabled=false)
  3. 操作系统环境变量
  4. @PropertySource 注释
  5. jar目录下的application.properties文件
  6. jar 内的application.properties 文件
  7. SpringApplication.setDefaultProperties

关于spring - 执行代码时如何阻止 Spring 批处理计划作业在第一次运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22318907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com