我正在考虑可能的方法,如何根据存储在数据库中的值(包括时间值)触发邮件发送。我能想到的一种方法是使用EJB @Timeout注释,但我不知道EJB如何在执行之前存储这些Timers。它不会消耗太多内存吗?另一种方法是创建一个Thread,它将定期检查数据库,如果db中的值对应,则将发送电子邮件。下一种方法可能是使用触发器从数据库执行java代码。这些方法有哪些优缺点?还有其他(更好的)方法吗?
答案 0 :(得分:0)
如果您的应用程序中需要定时/预定事件,则最好使用EJB计时器服务(如果您确实使用EJB)或使用Quartz调度服务。我不认为数据库触发器在您的情况下是最佳解决方案,因为触发器通常仅在某些事件发生时触发(即更新或记录插入),并且就我可以从您的问题中扣除而言,您需要检查数据库时不时地根据数据库中的值发送电子邮件,因此不仅要检查插入还是更新。
正如我所说,当您已经在使用EJB时,我认为EJB计时器服务是解决您问题的最简单方法。如果您使用的是JEE5,请检查JEE5 timer service tutorial,当您使用JEE6时,请检查JEE6 timer service tutorial。 J2EE 1.4版本也有一个计时器服务,但在这种情况下我会选择Quartz调度服务,因为这种方法可能更容易。如果您没有使用任何EJB,则可以始终使用Quartz scheduling service。
使用EJB Timer服务和Quartz调度服务,您可以轻松定义根据您可定义的计划调用的方法和/或类,例如每个小时,每分钟甚至每5秒的每5秒星期一。通过这种方式,您可以让调度服务通过您编写的方法调用数据库,然后在必要时发送电子邮件。这两种解决方案都非常易于使用,并且资源使用率非常低,因此您不必担心它会消耗太多内存。
亲切的问候