2016-04-04 8 views
4

Meine Anwendung lädt einige Cron-Muster aus einer Eigenschaftendatei. Im mit der @Scheduled Anmerkung wie folgt aus:Cron Scheduler "Muster deaktivieren"

@Scheduled(cron = "${config.cronExpression:0 0 11,23 * * *}")

Jetzt möchte ich einige Aufgaben deaktivieren und die einfachste Lösung wäre ein cron Muster wich geben wird nie ausgeführt. Um dies zu tun, habe ich darüber nachgedacht, einen Cron-Ausdruck zu verwenden, der nur an einem bestimmten Tag in der Vergangenheit ausgeführt wird. Leider erlauben die Spring-Cron-Ausdrücke nicht, ein Jahr oder ein Datum in der Vergangenheit hinzuzufügen.

Gibt es ein Muster, das niemals ausgeführt wird?

+1

Ich bin mir nicht sicher, ob das hilft, aber ich weiß, dass wir den Cron-Ausdruck 'none' erfolgreich verwenden. Aber das könnte ein Hack sein ... Andere Leute schlagen vor, mit 31. Februar oder 31. Dezember 2099 ... http://stackoverflow.com/questions/8324306/cron-job-that-will-never-execute http: // stackoverflow.com/questions/13835221/quartz-cron-expression-that-will-never-execute/13938099#13938099 – samjaf

Antwort

0

Im Frühling Boot @Profile in Spring Bean-Methode zum Deaktivieren eines geplanten Jobs verwenden.

@Service 
public class ... { 

    @Profile("prod") 
    @Scheduled(cron="${scheduler.cron}") 
    public void yourJob() { 
     // ... job enabled only for PROD environment 
    } 

} 

Siehe https://jira.spring.io/browse/SPR-10376.

+0

Sind Sie sicher, das funktioniert? Die [Dokumentation] (https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/Profile.html) sagt, dass '@ Profile' nur auf' @ angewendet werden kann. Bean' Methoden. Ich hatte noch keine Zeit es zu versuchen. – eztam

+0

Ja, '@ Profile' zu ​​verwenden bedeutet, es in Spring Bean zu verwenden, dh' @ Service', '@ Component'. –