web-dev-qa-db-fra.com

comment arrêter la première exécution des travaux planifiés par lots du printemps lors de l'exécution du code?

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>
21
Joshua

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 :

  1. Ligne de commande (--spring.batch.job.enabled=false)
  2. Propriétés du système Java (-Dspring.batch.job.enabled=false)
  3. Variables d'environnement OS
  4. @PropertySource annotations
  5. fichier application.properties dans le répertoire jar
  6. fichier application.properties à l'intérieur du fichier jar
  7. SpringApplication.setDefaultProperties
46
Chris

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.

1
V_J

ajouter

spring.batch.job.enabled=false

dans application.properties fonctionne avec moi.

0
Amir Choubani

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.

0
Karthik Prasad