8
votes

Solution de contournement pour CronSquenceGenerator dernier jour du mois?

OK, alors voici que je veux planifier une tâche à courir le dernier jour de chaque mois de 10h10 l'expression de cron est xxx

maintenant le problème est CRONEFERENCEGenerator est lancé NumberFormatxception Pour la valeur 'L'.Cefois signifie que le crönseFenenceGenerator ne prend pas en charge ce genre d'expression.Comment faire cela dans une autre manière (solution de contournement). Je ne veux pas utiliser de quartz ou que le printemps va le soutenir dans de nouvelles sorties. < / p>

ici est complet stacktrace: xxx

update:

suivi est ma méthode de planification xxx

et sur la ligne 2, il lance la formatxception lorsque je passe une expression cron spécifiée.


6 commentaires

J'ai un peu regardé autour d'un peu et il semble que l est effectivement soutenu. Comment allez-vous définir le travail? Annotation? Vous devriez probablement ajouter ceci à votre question.


@MagnileX Vérifier la mise à jour


Super. Pourriez-vous également coller le code pertinent qui appelle la méthode start () ? Je suis désolé pour cela, mais je pense vraiment à utiliser l devrait fonctionner.


En fait, cela n'affectera pas la sortie que vous pouvez le tester dans un programme principal simple, passez simplement une expression cron avec «L» dans la méthode de démarrage, vous obtiendrez l'exception.


@MagnileX: Je regarde le Code et je ne vois pas pourquoi vous pensez que cela doit fonctionner.


@sinuhepop Bien fait. En fait, je n'ai pas trop cherché et pensais que je faisait partie du modèle de crontab. Ce que je voulais vraiment m'assurer, c'est que OP a vraiment posté une chaîne correcte, ce qu'il m'a convaincu qu'il le fait.


4 Réponses :


6
votes

En tant que solution de contournement, je planifierais l'exécution pour toutes les dates xxx pré>

et vérifié la date réelle dans la méthode planifiée P>

public void scheduledTask() {
    Calendar c = Calendar.getInstance();
    if (c.get(Calendar.DATE) == c.getActualMaximum(Calendar.DATE)) {
        ...
    }
}


4 commentaires

Cela fonctionnerait, mais je ne ferai que planifier la méthode pour les derniers jours du mois, quelque chose comme le jour 27-31.


Oui, je pense que ce serait une certaine optimisation


Mais vous avez dit que vous vouliez le dernier jour de chaque mois


Désolé, je me suis mal mis à tort ... "non seulement les derniers jours" ... Je veux planifier mensuellement et la journée pourrait être n'importe quel jour de mois. Mais le problème n'arrive que pour les derniers jours ... IE 29 février..s mon expression cron est dynamique pour une tâche unique. Vérifiez la mise à jour ..



8
votes

Cette fonctionnalité n'est pas dans Syntaxe d'expression cron standard . Donc, probablement le printemps ne l'appliquera jamais. En regardant le code , je ne peux voir aucun Solution chirurgicale extension crönseSuiteGenerator . Alors pourquoi n'utilisez-vous pas de quartz car il s'agit d'un Caractéristique particulière ? < P> Selon votre besoin exact, vous pouvez implémenter votre propre Trigger . Quelque chose comme: xxx


1 commentaires

Merci, et je ne pouvais pas utiliser de quartz car il exige un refactoring au niveau de l'architecture ... "Ils me tueront" ... et je vais essayer votre idée de personnalité, il semble que cela fonctionne ...



2
votes

version optimisée qui ne fonctionne que le dernier jour d'un mois: xxx


0 commentaires

0
votes

Il y a une autre solution:

génère un mois de données. Le programme devrait fonctionner le premier jour du mois suivant pour s'assurer que toutes les données de l'ensemble du mois sont capturées. P>

import org.apache.commons.lang3.time.DateUtils;

@Scheduled(cron = "0 0 0 1 * ?") // runs on the first day of each month

public void doStuffOnFirstDayOfMonth() {

    Date now = DateUtils.addDays(new Date(), -1); // "now" is now on the last day of the month

}


0 commentaires