Frage

Wir verwenden enderTimerTask, um die Jobs (automatisch) in unserer Anwendung zu verwalten. Wir verwenden den folgenden Code:

<bean id="SampleTask" 
  class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
    <property name="targetObject" ref="sampleScheduler" />
    <property name="targetMethod" value="runMethod" />
</bean>

<bean id="sampleScheduler" class="com.sample.SampleScheduler" />

<bean id="timerTask"
    class="org.springframework.scheduling.timer.ScheduledTimerTask">
    <property name="timerTask" ref="schedulerTask" />
    <property name="delay" value="1000" />
    <property name="period" value="60000" />
</bean>

<bean class="org.springframework.scheduling.timer.TimerFactoryBean">
    <property name="scheduledTimerTasks">
        <list>
            <ref local="timerTask" />
        </list>
    </property>
</bean>

Durch die Verwendung des obigen Code runMethod Funktioniert für jede Minute gut. Aber wir möchten die Ausführung basierend auf der Serverzeit ändern. Wenn die Zeit auf dem Server 18 Uhr ist, müssen wir die Funktion aufrufen.

Hilfe wäre geschätzt.

War es hilfreich?

Lösung

Sie können den Aufgabenauslöser des Frühlings verwenden, um zu einem zertifizierten Zeitraum aufzurufen. Sie können verwenden CronTrigger.

Detaillierte Dokumentation ist hier

Andere Tipps

Wenn Sie nur geplante TimeTask verwenden müssen, rufen Sie die Timer -Aufgabe einmal pro Minute auf. Überprüfen Sie nun aus der Timer -Aufgabe, ob die Zeit 6 Uhr morgens beträgt, und führen Sie die erforderlichen Funktionen aus. Sonst kehre zurück.

CON: Diese Aufgabe, die keiner Zeit ist, wird für jede Minute ausgeführt (außer wenn sie eine gewisse Verarbeitung durchführen muss.

ODER

Rufen Sie den Zeitplan nur einmal aus der Feder auf. Wenn die Aufgabe ausgeführt wird, können Sie die aktuelle Zeit erhalten und den Unterschied zwischen aktueller Zeit und Zeit für die Ausführung der tatsächlichen Aufgabe berechnen. (Lassen Sie diesen Unterschied als Verzögerung bezeichnet).

Starten Sie nun in dieser Timer -Aufgabe einen neuen Executor -Executors.

Spring Quartz SchedulerFactoryBean

applicationContext.xml

<!-- quartz -->

<bean id="emial" class="quartzcore.QuartzEmail"/>

    <bean id="myTask" class="quartzcore.MyTask" >
        <property name="edao" ref="empdao"/>
        <property name="email" ref="emial"/>        
    </bean>
<!--
    <bean id="schedulerTask" class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
        <property name="targetObject" ref="myTask" />
        <property name="targetMethod" value="sayHello" />
    </bean>

<bean id="timerTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
    <property name="timerTask" ref="schedulerTask" />
    <property name="delay" value="5000" />
    <property name="period" value="5000" />
</bean>

<bean class="org.springframework.scheduling.timer.TimerFactoryBean">
    <property name="scheduledTimerTasks">
        <list>
            <ref local="timerTask" />
        </list>
    </property>
</bean>
 -->

    <bean name="quartzJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="myTask" />
        <property name="targetMethod" value="sayHello" />
    </bean>

    <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> 
        <property name="jobDetail" ref="quartzJob" />
        <property name="repeatInterval" value="1000" />
        <property name="startDelay" value="1000" />
    </bean>

    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="quartzJob" />
        <property name="cronExpression" value="0/15 * * * * ?" /> 
    </bean>

    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="jobDetails">
            <list>
                <ref bean="quartzJob" />
            </list>
        </property> 
        <property name="triggers">
            <list>
                <ref bean="cronTrigger" />
            </list>
        </property>
    </bean>

    </beans>

Methode der pertikulären Klasse, die wie in XML konfiguriert werden soll.

public class MyTask {

    private EmpDao edao;        
    private QuartzEmail email;    
    public static int size = 10;

    public void sayHello() {
        System.out.println("Hello !!! ");

        int currSize = 0;
        if ((currSize = edao.emp_count()) != size) {
            size = currSize;
            System.out.println("####### Records Changed in DB : "+size);
            email.sendMail();               
        }else {
            System.out.println("Records not added/removed. "+currSize);
        }
         (or base on dates)
        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        String today = dateFormat.format(new Date());
        System.out.println("Current Day : "+today);

        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date()); // Current date
        int numOfDays = cal.get(Calendar.DAY_OF_YEAR);
        System.out.println("Day of Year : "+numOfDays);

        Date edate = dateFormat.parse("27/10/2015");
        System.out.println("End Date : "+edate);
        cal.setTime(edate);  // Future Date
        int numOfpdays = cal.get(Calendar.DAY_OF_YEAR);
        final int fireTrigger = numOfpdays - numOfDays;
        System.out.println("Shedlue : "+fireTrigger);
        //if(fireTrigger > 0 && fireTrigger < 10 ){ //send a mail.. }   
    //...
}
  • Wenn die Auslöserzeit sehr geringer ist, kann dies die Methode möglicherweise nicht vollständig ausführen, da vor dem Erhalten der Antwort als nächster Trigger möglicherweise erhöht wird.

  • Fordern Sie an, an DBS zu gelangen, aber nicht zurückzugehen und zu führen, wenn {} Code. Kann jemand dies beheben?

Verwendung Anmerkungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top