In one of the projects at my current employer me and my team were asked to use a Java Job Scheduling library to schedule some jobs doing some business at dynamically configured time.
We decided to use Quartz as we were using Spring which provides a full integration to Quartz, and I was fascinated with the design and implementation of it.
I thought that I can start a new open source project that implements a Java Job Scheduler for learning purposes with some modifications/simplifications to the current design of Quartz library.
FireMeUp Scheduler is a simple Java scheduler that can be integrated within your application in a very simple way. The library is so simple and can be used in Small and Medium scale
projects, and it provides the following functionality.
- Jobs that run every interval of time.
- Jobs that run every day, week, biweekly, monthly, bimonthly, and yearly in a specific time of the day. (e.g., Every day at 12:00 AM).
- Having more that a scheduler in your application.
- Enable/Disable scheduler freely throughout your application life time.
- Configuring more than one trigger and associating them to schedulers.
- Triggers can be configured in more than one way either a simple trigger that is scheduled to be triggered every interval of time, and crontab trigger that is triggered either daily, weekly, biweekly, monthly, bimonthly, or yearly at specific time HH/MM/SS.
- Implementing your jobs and associating them to triggers, more than one job to each trigger.
- Register/Unregister triggers to schedulers.
- Register/Unregister jobs to triggers.
- Job can't overlap itself if its in a running state.
- You can implement your own trigger by extending the AbstractTrigger that contains most of the business.
Future Functions
Here are some ideas I need to add to the current project, and anyone who needs to start his own open source life can start implementing them and be part of the project.
- Adding state recovery functionality for the configured Schedulers, Triggers, Jobs, I think we can use in-memory (not recovered) and database (recovered) models.
- Threading management functionality, manage the number of concurrent running threads.
- Configuration management functionality, configuring the application programmatically and using a properties file.
- Providing a crontab expression parser functionality.
- Documentation of the whole project.
- More complex examples and test cases.