{"id":1123,"date":"2012-04-10T09:00:00","date_gmt":"2012-04-10T09:00:00","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/2012\/10\/quartz-scheduler-plugins-hidden-treasure.html"},"modified":"2012-10-21T23:35:35","modified_gmt":"2012-10-21T23:35:35","slug":"quartz-scheduler-plugins-hidden","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html","title":{"rendered":"Quartz scheduler plugins &#8211; hidden treasure"},"content":{"rendered":"<div dir=\"ltr\" style=\"text-align: left\">Although briefly described in the official documentation, I believe <a href=\"http:\/\/quartz-scheduler.org\/documentation\/quartz-2.1.x\/configuration\/ConfigPlugins\">Quartz plugins<\/a> aren&#8217;t known enough, looking at how useful they are.  <\/p>\n<p>Essentially plugins in Quartz are convenient classes wrapping registration of underlying <a href=\"http:\/\/quartz-scheduler.org\/documentation\/quartz-2.1.x\/configuration\/ConfigListeners\">listeners<\/a>. You are free to write your own plugins but we will focus on existing ones shipped with Quartz.  <\/p>\n<p><strong>LoggingTriggerHistoryPlugin  <\/strong><\/p>\n<p>First some background. Two main abstractions in Quartz are jobs and triggers. Job is a piece of code that we would like to schedule. Trigger instructs the scheduler when this code should run. CRON (e.g. run every Friday between 9 AM and 5 PM until November) and simple (run 100 times every 2 hours) triggers are most commonly used. You associate any number of triggers to a single job.   <\/p>\n<p>Believe it or not, Quartz by default provides no logging or monitoring whatsoever of executed jobs and triggers. There is an API, but no built-in logging is implemented. It won&#8217;t show you that it now executes this particular job due to this trigger firing. So the first thing you should do is adding the following lines to your quartz.properties:   <\/p>\n<pre class=\"brush:bash\">org.quartz.plugin.triggerHistory.class=org.quartz.plugins.history.LoggingTriggerHistoryPlugin\r\n\r\norg.quartz.plugin.triggerHistory.triggerFiredMessage=Trigger [{1}.{0}] fired job [{6}.{5}] scheduled at: {2, date, dd-MM-yyyy HH:mm:ss.SSS}, next scheduled at: {3, date, dd-MM-yyyy HH:mm:ss.SSS}\r\n\r\norg.quartz.plugin.triggerHistory.triggerCompleteMessage=Trigger [{1}.{0}] completed firing job [{6}.{5}] with resulting trigger instruction code: {9}. Next scheduled at: {3, date, dd-MM-yyyy HH:mm:ss.SSS}\r\n\r\norg.quartz.plugin.triggerHistory.triggerMisfiredMessage=Trigger [{1}.{0}] misfired job [{6}.{5}]. Should have fired at: {3, date, dd-MM-yyyy HH:mm:ss.SSS}\r\n<\/pre>\n<p>The first line (and the only required) loads the plugin class LoggingTriggerHistoryPlugin. The remaining lines are configuring the plugin, customizing the logging messages. I found the built-in defaults not very well thought, e.g. they display current time which is already part of the logging framework message. You are free to construct any logging message, see the API for details. Adding these extra few lines makes debugging and monitoring much easier:   <\/p>\n<pre class=\"brush:bash\">LoggingTriggerHistoryPlugin | Trigger [Demo.Every-few-seconds] fired job [Demo.Print-message] scheduled at:  04-04-2012 23:23:47.036, next scheduled at:  04-04-2012 23:23:51.036\r\n\/\/...job output\r\nLoggingTriggerHistoryPlugin | Trigger [Demo.Every-few-seconds] completed firing job [Demo.Print-message] with resulting trigger instruction code: DO NOTHING. Next scheduled at:  04-04-2012 23:23:51.036\r\n<\/pre>\n<p>You see now why naming your triggers (Demo.Every-few-seconds) and jobs (Demo.Print-message) is so important.   <div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p><strong>LoggingJobHistoryPlugin  <\/strong><\/p>\n<p>There is another handy plugin related to logging:   <\/p>\n<pre class=\"brush:bash\">org.quartz.plugin.jobHistory.class=org.quartz.plugins.history.LoggingJobHistoryPlugin\r\norg.quartz.plugin.jobHistory.jobToBeFiredMessage=Job [{1}.{0}] to be fired by trigger [{4}.{3}], re-fire: {7}\r\norg.quartz.plugin.jobHistory.jobSuccessMessage=Job [{1}.{0}] execution complete and reports: {8}\r\norg.quartz.plugin.jobHistory.jobFailedMessage=Job [{1}.{0}] execution failed with exception: {8}\r\norg.quartz.plugin.jobHistory.jobWasVetoedMessage=Job [{1}.{0}] was vetoed. It was to be fired by trigger [{4}.{3}] at: {2, date, dd-MM-yyyy HH:mm:ss.SSS}\r\n<\/pre>\n<p>The rule is the same &#8211; plugin + extra configuration. See <a href=\"http:\/\/quartz-scheduler.org\/api\/2.1.0\/org\/quartz\/plugins\/history\/LoggingJobHistoryPlugin.html\">JavaDoc of LoggingJobHistoryPlugin<\/a> for details and possible placeholders. Quick look at logs reveals very descriptive output:   <\/p>\n<pre class=\"brush:bash\">Trigger [Demo.Every-few-seconds] fired job [Demo.Print-message] scheduled at:  04-04-2012 23:34:53.739, next scheduled at:  04-04-2012 23:34:57.739\r\nJob [Demo.Print-message] to be fired by trigger [Demo.Every-few-seconds], re-fire: 0\r\n\/\/...job output\r\nJob [Demo.Print-message] execution complete and reports: null\r\nTrigger [Demo.Every-few-seconds] completed firing job [Demo.Print-message] with resulting trigger instruction code: DO NOTHING. Next scheduled at:  04-04-2012 23:34:57.739\r\n<\/pre>\n<p>I have no idea why these plugins aren&#8217;t enabled by default. After all, if you don&#8217;t want such a verbose output, you can turn it off in your logging framework. Never mind, I think it is a good idea to have them in place when troubleshooting Quartz execution.   <\/p>\n<p><strong>XMLSchedulingDataProcessorPlugin  <\/strong><\/p>\n<p>This is a pretty comprehensive plugin. It reads XML file (by default named quartz_data.xml) containing jobs and triggers definitions and adds them to the scheduler. This is especially useful when you have a global job that you need to add once. Plugin can either update the existing jobs\/triggers or ignore the XML file if they already exist &#8211; very useful when <a href=\"http:\/\/nurkiewicz.blogspot.com\/2012\/04\/configuring-quartz-with-jdbcjobstore-in.html\">JDBCJobStore <\/a>is used.   <\/p>\n<pre class=\"brush:bash\">org.quartz.plugin.xmlScheduling.class=org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin\r\n<\/pre>\n<p>In the aforementioned article we have been manually adding job to the scheduler:   <\/p>\n<pre class=\"brush:scala\">val trigger = newTrigger().\r\n        withIdentity(\"Every-few-seconds\", \"Demo\").\r\n        withSchedule(\r\n            simpleSchedule().\r\n                    withIntervalInSeconds(4).\r\n                    repeatForever()\r\n        ).\r\n        build()\r\n \r\nval job = newJob(classOf[PrintMessageJob]).\r\n        withIdentity(\"Print-message\", \"Demo\").\r\n        usingJobData(\"msg\", \"Hello, world!\").\r\n        build()\r\n \r\nscheduler.scheduleJob(job, trigger)\r\n<\/pre>\n<p>The same can be achieved with XML configuration, just place the following quartz_data.xml in your CLASSPATH:   <\/p>\n<pre class=\"brush:xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;job-scheduling-data xmlns=\"http:\/\/www.quartz-scheduler.org\/xml\/JobSchedulingData\"\r\n                     xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n                     xsi:schemaLocation=\" http:\/\/www.quartz-scheduler.org\/xml\/JobSchedulingData http:\/\/www.quartz-scheduler.org\/xml\/job_scheduling_data_2_0.xsd \"&gt;\r\n\r\n    &lt;processing-directives&gt;\r\n        &lt;overwrite-existing-data&gt;false&lt;\/overwrite-existing-data&gt;\r\n        &lt;ignore-duplicates&gt;true&lt;\/ignore-duplicates&gt;\r\n    &lt;\/processing-directives&gt;\r\n\r\n    &lt;schedule&gt;\r\n        &lt;trigger&gt;\r\n            &lt;simple&gt;\r\n                &lt;name&gt;Every-few-seconds&lt;\/name&gt;\r\n                &lt;group&gt;Demo&lt;\/group&gt;\r\n                &lt;job-name&gt;Print-message&lt;\/job-name&gt;\r\n                &lt;job-group&gt;Demo&lt;\/job-group&gt;\r\n                &lt;repeat-count&gt;-1&lt;\/repeat-count&gt;\r\n                &lt;repeat-interval&gt;4000&lt;\/repeat-interval&gt;\r\n            &lt;\/simple&gt;\r\n        &lt;\/trigger&gt;\r\n\r\n        &lt;job&gt;\r\n            &lt;name&gt;Print-message&lt;\/name&gt;\r\n            &lt;group&gt;Demo&lt;\/group&gt;\r\n            &lt;job-class&gt;com.blogspot.nurkiewicz.quartz.demo.PrintMessageJob&lt;\/job-class&gt;\r\n            &lt;job-data-map&gt;\r\n                &lt;entry&gt;\r\n                    &lt;key&gt;msg&lt;\/key&gt;\r\n                    &lt;value&gt;Hello, World!&lt;\/value&gt;\r\n                &lt;\/entry&gt;\r\n            &lt;\/job-data-map&gt;\r\n        &lt;\/job&gt;\r\n\r\n    &lt;\/schedule&gt;\r\n\r\n\r\n&lt;\/job-scheduling-data&gt;\r\n<\/pre>\n<p>The same can be achieved with XML configuration, just place the following quartz_data.xml in your CLASSPATH:   <\/p>\n<pre class=\"brush:bash\">org.quartz.plugin.xmlScheduling.fileNames=\/etc\/quartz\/system-jobs.xml,\/home\/johnny\/my-jobs.xml\r\norg.quartz.plugin.xmlScheduling.scanInterval=60\r\n<\/pre>\n<p><strong>ShutdownHookPlugin  <\/strong><\/p>\n<p>Last but not least, ShutdownHookPlugin. Small but probably useful plugin that register shutdown hook in the JVM in order to gently stop the scheduler. However I recommend turning cleanShutdown off &#8211; if the system already tries to abruptly stop the application (typically scheduler shutdown is called by Spring via SchedulerFactoryBean) or the user hit Ctrl+C &#8211; waiting for currently running jobs seems like a bad idea. After all, maybe we are killing the application because some jobs are running for too long\/hunging?   <\/p>\n<pre class=\"brush:bash\">org.quartz.plugin.shutdownHook.class=org.quartz.plugins.management.ShutdownHookPlugin\r\norg.quartz.plugin.shutdownHook.cleanShutdown=false\r\n<\/pre>\n<p>As you can see Qurtz ships with few quite interesting plugins. For some reason they aren&#8217;t described in detail in the official documentation, but they work pretty well and are a valuable addition to scheduler.  <\/p>\n<p><a href=\"https:\/\/github.com\/nurkiewicz\/quartz-demo\">The source code with applied plugins<\/a> is available on GitHub. <\/p>\n<p><strong><i>Reference: <\/i><\/strong><a href=\"http:\/\/nurkiewicz.blogspot.com\/2012\/04\/quartz-scheduler-plugins-hidden.html\">Quartz scheduler plugins &#8211; hidden treasure  <\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/p\/jcg.html\">JCG partner<\/a> Tomasz Nurkiewicz at the <a href=\"http:\/\/nurkiewicz.blogspot.com\/\">Java and neighbourhood<\/a> blog. <\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Although briefly described in the official documentation, I believe Quartz plugins aren&#8217;t known enough, looking at how useful they are. Essentially plugins in Quartz are convenient classes wrapping registration of underlying listeners. You are free to write your own plugins but we will focus on existing ones shipped with Quartz. LoggingTriggerHistoryPlugin First some background. Two &hellip;<\/p>\n","protected":false},"author":13,"featured_media":220,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[200],"class_list":["post-1123","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-quartz"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Quartz scheduler plugins - hidden treasure - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Although briefly described in the official documentation, I believe Quartz plugins aren&#039;t known enough, looking at how useful they are. Essentially\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Quartz scheduler plugins - hidden treasure - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Although briefly described in the official documentation, I believe Quartz plugins aren&#039;t known enough, looking at how useful they are. Essentially\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2012-04-10T09:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-10-21T23:35:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/quartz-scheduler-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Tomasz Nurkiewicz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/tnurkiewicz\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tomasz Nurkiewicz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/quartz-scheduler-plugins-hidden.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/quartz-scheduler-plugins-hidden.html\"},\"author\":{\"name\":\"Tomasz Nurkiewicz\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/fb1be85725c10e8361e641fa851e79e1\"},\"headline\":\"Quartz scheduler plugins &#8211; hidden treasure\",\"datePublished\":\"2012-04-10T09:00:00+00:00\",\"dateModified\":\"2012-10-21T23:35:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/quartz-scheduler-plugins-hidden.html\"},\"wordCount\":624,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/quartz-scheduler-plugins-hidden.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/quartz-scheduler-logo.jpg\",\"keywords\":[\"Quartz\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/quartz-scheduler-plugins-hidden.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/quartz-scheduler-plugins-hidden.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/quartz-scheduler-plugins-hidden.html\",\"name\":\"Quartz scheduler plugins - hidden treasure - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/quartz-scheduler-plugins-hidden.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/quartz-scheduler-plugins-hidden.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/quartz-scheduler-logo.jpg\",\"datePublished\":\"2012-04-10T09:00:00+00:00\",\"dateModified\":\"2012-10-21T23:35:35+00:00\",\"description\":\"Although briefly described in the official documentation, I believe Quartz plugins aren't known enough, looking at how useful they are. Essentially\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/quartz-scheduler-plugins-hidden.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/quartz-scheduler-plugins-hidden.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/quartz-scheduler-plugins-hidden.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/quartz-scheduler-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/quartz-scheduler-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/quartz-scheduler-plugins-hidden.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Quartz scheduler plugins &#8211; hidden treasure\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/fb1be85725c10e8361e641fa851e79e1\",\"name\":\"Tomasz Nurkiewicz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f2a8f9f1060fc7c1161c42f8ba901e0e79fb767dec39ec34b2d3b95cab9dc728?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f2a8f9f1060fc7c1161c42f8ba901e0e79fb767dec39ec34b2d3b95cab9dc728?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f2a8f9f1060fc7c1161c42f8ba901e0e79fb767dec39ec34b2d3b95cab9dc728?s=96&d=mm&r=g\",\"caption\":\"Tomasz Nurkiewicz\"},\"description\":\"Java EE developer, Scala enthusiast. Enjoying data analysis and visualization. Strongly believes in the power of testing and automation.\",\"sameAs\":[\"http:\\\/\\\/nurkiewicz.blogspot.com\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/tnurkiewicz\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/tomasz-nurkiewicz\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Quartz scheduler plugins - hidden treasure - Java Code Geeks","description":"Although briefly described in the official documentation, I believe Quartz plugins aren't known enough, looking at how useful they are. Essentially","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html","og_locale":"en_US","og_type":"article","og_title":"Quartz scheduler plugins - hidden treasure - Java Code Geeks","og_description":"Although briefly described in the official documentation, I believe Quartz plugins aren't known enough, looking at how useful they are. Essentially","og_url":"https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2012-04-10T09:00:00+00:00","article_modified_time":"2012-10-21T23:35:35+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/quartz-scheduler-logo.jpg","type":"image\/jpeg"}],"author":"Tomasz Nurkiewicz","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/tnurkiewicz","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Tomasz Nurkiewicz","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html"},"author":{"name":"Tomasz Nurkiewicz","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/fb1be85725c10e8361e641fa851e79e1"},"headline":"Quartz scheduler plugins &#8211; hidden treasure","datePublished":"2012-04-10T09:00:00+00:00","dateModified":"2012-10-21T23:35:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html"},"wordCount":624,"commentCount":1,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/quartz-scheduler-logo.jpg","keywords":["Quartz"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html","url":"https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html","name":"Quartz scheduler plugins - hidden treasure - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/quartz-scheduler-logo.jpg","datePublished":"2012-04-10T09:00:00+00:00","dateModified":"2012-10-21T23:35:35+00:00","description":"Although briefly described in the official documentation, I believe Quartz plugins aren't known enough, looking at how useful they are. Essentially","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/quartz-scheduler-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/quartz-scheduler-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/quartz-scheduler-plugins-hidden.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Quartz scheduler plugins &#8211; hidden treasure"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/fb1be85725c10e8361e641fa851e79e1","name":"Tomasz Nurkiewicz","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f2a8f9f1060fc7c1161c42f8ba901e0e79fb767dec39ec34b2d3b95cab9dc728?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f2a8f9f1060fc7c1161c42f8ba901e0e79fb767dec39ec34b2d3b95cab9dc728?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f2a8f9f1060fc7c1161c42f8ba901e0e79fb767dec39ec34b2d3b95cab9dc728?s=96&d=mm&r=g","caption":"Tomasz Nurkiewicz"},"description":"Java EE developer, Scala enthusiast. Enjoying data analysis and visualization. Strongly believes in the power of testing and automation.","sameAs":["http:\/\/nurkiewicz.blogspot.com\/","https:\/\/x.com\/https:\/\/twitter.com\/tnurkiewicz"],"url":"https:\/\/www.javacodegeeks.com\/author\/tomasz-nurkiewicz"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=1123"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1123\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/220"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=1123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=1123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=1123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}