Hi Charles,
I gave it a quick look and debugged org.apache.tapestry5.ioc.internal.services.cron.CronExpression.getTimeAfter(Date) with your expression and can confirm that there's an issue with handling "L-<number>". At first, it got the right day, but then it gets reset to today. The code is quite complex, and I haven't found the bug yet. There are three possible workarounds I can think of: - Implement org.apache.tapestry5.ioc.services.cron.Schedule yourself with another Cron-Parser. This option might be overkill and hard to get right. - Use a scheduling framework like http://www.quartz-scheduler.org/ which might also be a hassle to do correctly. We use it, but with a lot of boilerplate/glue code. - Schedule a Job on every 18th that calculates the next execution date for the "real" Job and add it with a fixed day of month. Jobs get removed if no further execution date is calculable, so it shouldn't accumulate memory over time. I've created an issue: https://issues.apache.org/jira/browse/TAP5-2723 Cheers Ben On Mon, Apr 25, 2022 at 11:50 PM Charles Karow <char...@karow.com> wrote: > Hi, > > There seems to be an issue with CronExpression using "L" (last day of > month). > > When I place the following code in my AppModule, the job is triggered at > the appointed time, and then keeps executing over and over immediately in a > seemingly infinite loop. I can work around by using a day-of-the-month > number only, but would prefer using "L-10." > > Is there any other work around? > > Thanks, > > Charles > > @Startup > public static void scheduleJobs(PeriodicExecutor executor) > { > executor.addJob( > new CronSchedule("0 55 8 L-9 * ? *"), > "Testing", > new Runnable() { > @Override > public void run() { > System.err.println("Executing Test..."); > } > }); > > } > > > -- > [image: Karow Associates] <http://www.karow.com/> > Charles Karow Software Architect/Engineer > 1.410.276.4016 • [image: LinkedIn] <http://www.linkedin.com/in/karow> > "Specializing in Fast, Reliable Web Applications" > >