{"id":1600,"date":"2016-10-04T16:21:16","date_gmt":"2016-10-04T14:21:16","guid":{"rendered":"http:\/\/blog.rabahi.net\/?page_id=1600"},"modified":"2017-05-11T11:29:03","modified_gmt":"2017-05-11T09:29:03","slug":"java-spring-quartz","status":"publish","type":"page","link":"https:\/\/blog.rabahi.net\/?page_id=1600","title":{"rendered":"Java &#8211; Quartz"},"content":{"rendered":"<div id=\"toc_container\" class=\"no_bullets\"><p class=\"toc_title\">Contents<\/p><ul class=\"toc_list\"><li><a href=\"#Dependencies\"><span class=\"toc_number toc_depth_1\">1<\/span> Dependencies<\/a><\/li><li><a href=\"#Create_a_job\"><span class=\"toc_number toc_depth_1\">2<\/span> Create a job<\/a><\/li><li><a href=\"#Cron\"><span class=\"toc_number toc_depth_1\">3<\/span> Cron<\/a><ul><li><a href=\"#Create_cron\"><span class=\"toc_number toc_depth_2\">3.1<\/span> Create cron<\/a><\/li><li><a href=\"#Read_Cron\"><span class=\"toc_number toc_depth_2\">3.2<\/span> Read Cron<\/a><\/li><li><a href=\"#Update_Cron\"><span class=\"toc_number toc_depth_2\">3.3<\/span> Update Cron<\/a><\/li><li><a href=\"#Delete_Cron\"><span class=\"toc_number toc_depth_2\">3.4<\/span> Delete Cron<\/a><\/li><\/ul><\/li><\/ul><\/div>\n<h1><span id=\"Dependencies\">Dependencies<\/span><\/h1>\n<p>If you use maven, add this to your pom.xml : <\/p>\n<pre lang=\"xml\">\r\n<dependency>\r\n  <groupId>org.quartz-scheduler<\/groupId>\r\n  <artifactId>quartz<\/artifactId>\r\n  <version>${quartz.version}<\/version>\r\n<\/dependency>\r\n<\/pre>\n<h1><span id=\"Create_a_job\">Create a job<\/span><\/h1>\n<p>You class must implement org.quartz.Job:<\/p>\n<pre lang=\"java\">\r\n@PersistJobDataAfterExecution\r\n@DisallowConcurrentExecution\r\npublic class LaunchTaskCron implements Job\r\n{\r\n  private static final Logger LOGGER = Logger.getLogger(LaunchTaskCron.class);\r\n  \r\n  public LaunchTaskCron()\r\n  {\r\n  LOGGER.info(\"LOADING LaunchTaskCron\");\r\n  }\r\n\r\n  public void execute(JobExecutionContext context) throws JobExecutionException {\r\n\r\n  JobDataMap jdm = context.getJobDetail().getJobDataMap();\r\n  String szJobName = (String) jdm.get(\"jobName\");\r\n    \r\n  try {\r\n      \/\/ execute tests:\r\n      String szTaskId = new Date().toString();\r\n      jdm.put(\"taskId\", szTaskId);\r\n      LOGGER.info(String.format(\"Execution jobName: '%s' - taskId : '%s'\", szJobName,szTaskId));      \r\n\r\n    } catch (Exception e) {\r\n      LOGGER.error(e.getMessage(),e);\r\n    }\r\n\r\n  }  \r\n\r\n}\r\n<\/pre>\n<h1><span id=\"Cron\">Cron<\/span><\/h1>\n<h2><span id=\"Create_cron\">Create cron<\/span><\/h2>\n<pre lang=\"java\">\r\n\/\/ every 5 seconds:\r\nString cronExpression = \"0\/5 * * * * ?\";\r\n\r\nif(CronExpression.isValidExpression(cronExpression)) {\r\n  \/\/\/ Data map:\r\n  JobDataMap jdm = new JobDataMap();\r\n  jdm.put(\"jobName\", szJobName);\r\n\r\n  \/\/ Build job:\r\n  JobDetail job = JobBuilder.newJob(LaunchTaskCron.class).setJobData(jdm)\r\n\t\t\t\t\t.withIdentity(szJobName, DEFAULT_TRIGGER_GROUP).build();\t\t\t\r\n\r\n\r\n \/\/ Build Trigger\r\n Trigger trigger = TriggerBuilder\r\n\t\t\t.newTrigger()\r\n\t\t\t.withIdentity(szJobName, \"group\")\r\n\t\t\t.withSchedule(\r\n\t\t\t\tCronScheduleBuilder.cronSchedule(cronExpression))\r\n\t\t\t\t.build();\r\n\r\n\/\/ Schedule\t\t\r\nscheduler.scheduleJob(job, trigger);\r\n}\r\n\r\n<\/pre>\n<h2><span id=\"Read_Cron\">Read Cron<\/span><\/h2>\n<pre lang=\"java\">\r\nString triggerName=jobName;\r\nString triggerGroup=DEFAULT_TRIGGER_GROUP;\r\n\r\nTriggerKey triggerKey = new TriggerKey(triggerName, triggerGroup);\r\nTrigger trigger = scheduler.getTrigger(triggerKey);\r\n<\/pre>\n<h2><span id=\"Update_Cron\">Update Cron<\/span><\/h2>\n<p>To update cron, you have to remove it and add it again :<\/p>\n<pre lang=\"java\">\r\nremoveFromCron(jobName);\r\naddCron(jobName,cronExpression);\r\n<\/pre>\n<h2><span id=\"Delete_Cron\">Delete Cron<\/span><\/h2>\n<pre lang=\"java\">\r\nString triggerName=jobName;\r\nString triggerGroup=DEFAULT_TRIGGER_GROUP;\r\n\r\nTriggerKey triggerKey = new TriggerKey(triggerName, triggerGroup);\r\nTrigger trigger = scheduler.getTrigger(triggerKey);\r\n\r\nif(trigger != null){ \r\n  \/\/ job found, unschedule it:\r\n  scheduler.unscheduleJob(triggerKey);\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Contents1 Dependencies2 Create a job3 Cron3.1 Create cron3.2 Read Cron3.3 Update Cron3.4 Delete Cron Dependencies If you use maven, add this to your pom.xml : org.quartz-scheduler quartz ${quartz.version} Create a job You class must implement org.quartz.Job: @PersistJobDataAfterExecution @DisallowConcurrentExecution public class LaunchTaskCron implements Job { private static final Logger LOGGER = Logger.getLogger(LaunchTaskCron.class); public LaunchTaskCron() { LOGGER.info(&#8220;LOADING [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1538,"menu_order":12,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1600","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1600","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1600"}],"version-history":[{"count":4,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1600\/revisions"}],"predecessor-version":[{"id":1977,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1600\/revisions\/1977"}],"up":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1538"}],"wp:attachment":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1600"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}