comment arrêter que les travaux programmés par lots au printemps ne soient pas exécutés lors de l'exécution du code?

j'utilise le lot de printemps 2.2.4 avec quartz pour exécuter quelques travaux à un certain moment

le problème est que les jobs s'exécutent toujours après avoir exécuté le code la première fois puis il s'exécute en fonction de l'heure programmée. Je veux arrêter la première course et ne la laisser tourner qu'en fonction de l'heure prévue.

mon expression cron est "0 0 0 * * ?"Et j'ai aussi essayé "0 0 0 1/1 * ? *" mais il s'exécute encore une fois au démarrage de l'application

comment puis-je arrêter la première exécution lorsque l'application démarre?

c'est le travail fichier de contexte:

<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>
18
demandé sur Joshua 2014-03-11 11:20:51

4 réponses

j'ai eu le même problème et j'ai déterminé qu'il était causé par le service d'autoconfiguration de Spring boot. Par défaut, il exécutera toutes les tâches configurées après le démarrage de l'application.

il y a deux propriétés qui affectent ce comportement:

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

le premier empêche le lancement de tous les emplois lorsqu'il est mis à false. La seconde accepte un liste délimitée par des virgules des noms de tâches qui seront exécutées.

ces deux propriétés peuvent être définies de différentes manières spécifiées dans le Spring boot docs :

  1. ligne de commande ( --spring.batch.job.enabled=false )
  2. propriétés système Java ( -Dspring.batch.job.enabled=false )
  3. variables d'environnement OS
  4. @PropertySource annotations
  5. de l'application.fichier de propriétés dans le jar directory
  6. de l'application.fichier de propriétés à l'intérieur du pot
  7. SpringApplication.setDefaultProperties
44
répondu Chris 2014-04-14 18:43:01

pour résoudre cela, vous devrez créer un fichier de propriétés de plus et le nommer" batch.propriété."

# 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.les propriétés")

Espérons que cette aide.

1
répondu V_J 2017-06-23 07:07:42

je suppose qu'il y a un problème de configuration. Voici les configurations que j'ai testées avec la même expression de cron. J'ai un contexte de lancement.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 lot kp.xml, j'ai défini job, itemreader, itemwriter etc.

0
répondu Karthik Prasad 2014-03-12 13:02:20

ajouter

spring.batch.job.enabled=false

en application.propriétés travaille avec moi.

0
répondu Amir Choubani 2017-08-03 13:35:18