j'utilise printemps lot 2.2.4 avec quartz pour exécuter des travaux à un moment donné
le problème est que les tâches sont toujours exécutées après la première exécution du code, puis qu'il est exécuté en fonction de l'heure planifiée. Je veux arrêter la première exécution et la laisser s'exécuter uniquement en fonction de l'heure prévue.
mon expression cron est "0 0 0 * *?" & J’ai aussi essayé "0 0 0 1/1 *? *" Mais il s’exécute quand même une fois que l’application a démarré
comment puis-je arrêter la première exécution lorsque l'application démarre?
voici le fichier de contexte de travail:
<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>
J'ai eu le même problème et j'ai déterminé qu'il était causé par le service de configuration automatique de Spring Boot. Par défaut, il exécutera tous les beans travaux configurés après le démarrage de l'application.
Deux propriétés affectent ce comportement:
spring.batch.job.enabled
spring.batch.job.names
Le premier empêche le lancement de tous les travaux lorsqu'il est défini sur false. Le second accepte une liste délimitée par des virgules de noms de travaux à exécuter.
Ces deux propriétés peuvent être définies de différentes manières spécifiées dans les Documents de démarrage du printemps :
--spring.batch.job.enabled=false
)-Dspring.batch.job.enabled=false
)Pour résoudre cela, vous devrez créer un fichier de propriétés supplémentaire et nommez-le "batch.properties".
# Disable batch auto-start
spring.batch.job.enabled=false
Vous pouvez donner la référence à ce fichier à partir de votre fichier de configuration Java.
Échantillon:
@Configuration
@ComponentScan("com.code")
@EnableBatchProcessing
@PropertySource("classpath:batch.properties")
public class AppConfig {
}
@PropertySource ("classpath: batch.properties")
J'espère que cela t'aides.
ajouter
spring.batch.job.enabled=false
dans application.properties fonctionne avec moi.
Je suppose un problème de configuration. Voici les configurations que j'ai testées avec la même expression cron. J'ai launch-context.xml avec la configuration suivante.
<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>
Dans le fichier kp-batch.xml, j'ai défini job, itemreader, itemwriter, etc.