Java Liferay 7.1-从调度程序作业终止线程执行
我在Liferay 7.1中有以下工作:Java Liferay 7.1-从调度程序作业终止线程执行,java,liferay,liferay-7,Java,Liferay,Liferay 7,我在Liferay 7.1中有以下工作: @Component( immediate = true, property = {"cron.expression=0 5 10 * * ? *"}, service = CustomJob.class ) public class CustomJob extends BaseMessageListener { .... @Override protected void doRec
@Component(
immediate = true, property = {"cron.expression=0 5 10 * * ? *"},
service = CustomJob.class
)
public class CustomJob extends BaseMessageListener {
....
@Override
protected void doReceive(Message message) throws Exception {
// HERE I CALL A SERVICE FUNCTION TO INACTIVATE USER, SEND MAILS, READ FILES TO IMPORT DATA
RunnableService rs = new RunnableService();
rs.run();
}
....
}
我的RunnableService:
public class RunnableService implements Runnable {
@Override
public synchronized void run() {
// DO MY STUFF
}
}
该作业运行良好,但即使第一次调用的服务执行尚未完成,也可以启动该作业的另一个实例
是否有任何解决方案可以终止第一个进程
谢谢,听起来似乎有几种选择,这取决于您希望通过此实现什么:
- 您不应该用技术措施中断线程。而是让您的长时间运行的任务经常检查它是否仍在运行,否则会优雅地终止,并有可能在完成任务后进行清理
- 您可以使用Liferay的MessageBus实现您的功能,而无需启动线程(这在webapp中无论如何都不是好行为)。这样做的好处是,即使在集群中,最终也只有一个并发执行
- 您可以在Liferay进程之外实现您的功能,只需与Liferay的API交互即可完成任何需要对Liferay产生影响的操作。这种方法的美妙之处在于,两者都可以被分离到不同的机器上,例如规模