On previous projects I have used Spring Framework's scheduling integration, which provides convenience classes for Quartz. This worked well, but a good alternative on Unix-like systems is to use cron.
Here are the steps to get something simple working:
1. Open a terminal and log in to your server
2. Open your crontab for editing:
crontab -e
3. Add a line like this in your crontab:
* * * * * wget -O /tmp/your-domain_scheduler_out http://your-domain.com/schedulerMake sure you enter the correct domain name. Using localhost will work in some cases, depending on your server's configuration.
4. Now you need to create your scheduler servlet:
// Accessed using path: /scheduler public class SchedulerServlet extends HttpServlet implements Servlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException { // Invoke your scheduler service - something you will need to implement SchedulerService.getInstance().doTasks(); response.setContentType("text/plain"); PrintWriter out = response.getWriter(); // Write the current date/time to the response out.println((new Date()).toString() + " :: Scheduler invoked"); out.close(); } }5. Update your web.xml:
<servlet> <servlet-name>schedulerServlet</servlet-name> <servlet-class>com.your-domain.some.path.SchedulerServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>schedulerServlet</servlet-name> <url-pattern>/scheduler</url-pattern> </servlet-mapping>6. Deploy and test:
Compile your serlvet, reload your application and make sure your scheduler servlet works. If the cron job is working correctly you should see the scheduler_out file in your /tmp directory (which will be updated every minute).
7. Improvements for production deployment:
You should consider doing the following before deploying in a production environment:
- Secure the scheduler servlet by restricting access to the local IP address
- Instead of invoking wget directly in your crontab, you could invoke a shell script
- Handle exceptions and maintain a log file
- Decide how often the scheduler should run and change your cron entry accordingly.
Great article. normally we use Autosys for scheduling requirement rather putting something on application layer but if you have to then this is good way.I have also blogged some of my experice as Ldap authentication using Spring with Example let me know how do you find it.
ReplyDeleteThanks
Don't forget about cron4j
ReplyDelete