В Liferay существует возможность создания заданий, выполняемых по расписанию. Реализация планировщика заданий в Liferay версии 5 и версии 6 отличаются. В последней версии Liferay используется стандартный механизм шины сообщений, т.е. любое задание, по сути, является слушателем на получение сообщений. Из задания доступны все те же возможности (Liferay API), что и из любого плагина.
Для создания своего собственного задания в Liferay необходимо:
- Объявить планировщик в конфигурационном файле портлета liferay-portlet.xml внутри тега
scheduler
ru.amigosteam.liferay.shceduler.SchedulerImpl
10
minute
- Необходимо задать класс, являющийся собственно самим заданием, а также периодичность запуска.
Периодичность запуска определяется в секции и может быть задана 2 способами:
- В формате cron
*/10 * * * * ?
- В упрощенном формате с указанием единицы времени и значением периода. Доступные значения для указания периода: "day", "hour", "minute", "second", "week". Значение по-умолчанию "second".
10
minute
- Реализовать интерфейс com.liferay.portal.kernel.messaging.MessageListener в своем задании
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.messaging.Message;
import com.liferay.portal.kernel.messaging.MessageListener;
import com.liferay.portal.kernel.messaging.MessageListenerException;
public class SchedulerImpl implements MessageListener {
private static final Log log = LogFactoryUtil.getLog(SchedulerImpl.class);
public void receive(Message msgs) throws MessageListenerException {
log.info("Scheduler started");
//TODO Implementation here
log.info("Scheduler finished");
}
}
Примечание
- Для планирования заданий в Liferay используется библиотека с открытым исходным кодом Quartz. Вся информация о заданиях хранится в таблицах БД.
- При объявлении планировщика важен порядок следования элементов
Источники