Le traitement par lots qui s'exécute régulièrement est courant dans les systèmes. Quartz est une bibliothèque de planification Java bien connue. quartz:http://www.quartz-scheduler.org/
Le planificateur de Liferay utilise également Quaryz.
Voici un bref résumé de la façon de le faire dans Liferay.

Source: http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html

Source: http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html
--activer: processus d'activation du module OSGi --deactivate: le module OSGi arrête le traitement --receive: logique métier
TestBatch.java
package com.test.batch;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.messaging.DestinationNames;
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.scheduler.SchedulerEngineHelper;
import com.liferay.portal.kernel.scheduler.SchedulerEntryImpl;
import com.liferay.portal.kernel.scheduler.TimeUnit;
import com.liferay.portal.kernel.scheduler.Trigger;
import com.liferay.portal.kernel.scheduler.TriggerFactoryUtil;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Modified;
import org.osgi.service.component.annotations.Reference;
@Component(immediate = true, property = {
}, service =TestBatch.class)
public class TestBatch implements MessageListener {
	private static Log _log = LogFactoryUtil.getLog(TestBatch.class);
	//Intervalle de début de lot
	private static int INTERVAL_TIME = 15;
	@Override
	public void receive(Message message) throws MessageListenerException {
		
		_log.info("Début de lot");
		
		// do something
		
		_log.info("Fin du lot");
	}
	
	@Activate
	@Modified
	protected void activate() {
		String batchClassName = this.getClass().getName();
        //Paramètres de déclenchement
		Trigger trigger = TriggerFactoryUtil.createTrigger(batchClassName, batchClassName, INTERVAL_TIME, TimeUnit.MINUTE);
		SchedulerEntryImpl schedulerEntryImpl = new SchedulerEntryImpl(batchClassName, trigger);
		_schedulerEngineHelper.register(this, schedulerEntryImpl, DestinationNames.SCHEDULER_DISPATCH);
		_log.info("Batch is activated.");
	}
	@Deactivate
	protected void deactivate() {
		_schedulerEngineHelper.unregister(this);
	}
	@Reference(unbind = "-")
	private volatile SchedulerEngineHelper _schedulerEngineHelper;
}
Il est fourni dans la classe TriggerFactoryUtil, vous pouvez donc le créer facilement.
CronTrigger: http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html Article de référence: https://portal.liferay.dev/docs/7-1/tutorials/-/knowledge_base/t/message-listeners
c'est tout
Recommended Posts