This blog will give an understanding on how we can write a Scheduler to run a cron job for performing a background job on the portal. This scheduler can be used based on your business requirement.
Step 1 :
Create a scheduler class in your portlet and specify the path in the
liferay- portlet.xml
<portlet>
<portlet-name>myportlet</portlet-name>
<icon>/icon.png</icon>
<scheduler-entry>
<scheduler-description>
This scheduler is used to run my own job
</scheduler-description>
<scheduler-event-listener- class>com.portlet.myportlet.trigger.MyScheduler</scheduler-event-listener-class>
<trigger>
<!– <simple>
<simple-trigger-value>15</simple-trigger-value>
<time-unit>minute</time-unit>
</simple> –>
<cron>
<cron-trigger-value>0 0 0 * * ?</cron-trigger-value>
</cron>
</trigger>
</scheduler-entry>
</portlet>
<portlet-name>myportlet</portlet-name>
<icon>/icon.png</icon>
<scheduler-entry>
<scheduler-description>
This scheduler is used to run my own job
</scheduler-description>
<scheduler-event-listener- class>com.portlet.myportlet.trigger.MyScheduler</scheduler-event-listener-class>
<trigger>
<!– <simple>
<simple-trigger-value>15</simple-trigger-value>
<time-unit>minute</time-unit>
</simple> –>
<cron>
<cron-trigger-value>0 0 0 * * ?</cron-trigger-value>
</cron>
</trigger>
</scheduler-entry>
</portlet>
This (<cron-trigger-value>0 0 0 * * ?</cron-trigger-value>) indicates that the scheduler will run every night at 00 hrs.
You can even have a simple scheduler running every hour,minute,seonds by specifying it as
<simple>
<simple-trigger-value>15</simple-trigger-value>
<time-unit>minute</time-unit>
</simple>
<simple-trigger-value>15</simple-trigger-value>
<time-unit>minute</time-unit>
</simple>
Step 2 : Create a Scheduler class.
The class name specified in the liferay-portlet.xml has to be same as scheduler class
import com.liferay.portal.kernel.messaging.Message;
import com.liferay.portal.kernel.messaging.MessageListener;
import com.liferay.portal.kernel.messaging.MessageListenerException;
import com.liferay.portal.kernel.messaging.MessageListener;
import com.liferay.portal.kernel.messaging.MessageListenerException;
public class MyScheduler implements MessageListener {
public void receive(Message arg0) throws MessageListenerException {
//Here is the buisness logic to be written as per your requirement
System.out.println(“scheduler has been started”);
}
}
Based on the entry on the liferay-portlet.xml this will run accordingly.
Hope it helps
No comments:
Post a Comment