Java调度与SQL调度

时间:2011-11-15 12:14:59

标签: java sql scheduling schedule

这是我的要求:

  

将日期插入到包含每条记录的db表中。两个星期   在该微粒日期之前,应该输入一个单独的记录   不同的表。

我最初的解决方案是提出一个SQL计划工作,但我的客户坚持要通过java处理它。

  • 最好的办法是什么?
  • 使用SQL调度作业和Java调度来完成此任务有哪些优缺点?

2 个答案:

答案 0 :(得分:2)

问自己一个问题:这项工作属于哪个领域?如果它是数据完整性所必需的,那么它显然是DBMS的问题,可能最好在那里处理。如果它是业务领域的一部分而不是数据,或者可能需要DBMS不可用或不自然的信息或处理,那么它最好是外部的。

我会说,使用最好的工具来完成工作。使用它提供的任何功能来处理由数据库处理的内容通常很好。例如,一个日志表保存了另一个表中记录状态更新的“快照”,我通常喜欢触发它,从我的应用程序的手中承担这个责任。

但这几乎可以在任何DBMS中使用。其他数据库可能无法提供您所需的作业调度功能。如果可以想象有一天你会转换到不同的DBMS,那么你将被迫用Java做这件事。这就是Java方法的优势:您拥有独立于数据库的功能。如果您将纯JDBC与标准SQL查询一起使用,那么您就拥有了一个完全可移植的解决方案。

这两种方法似乎都有效。考虑什么导致最少的工作和担忧。如果用Java完成,则需要确保进程正在运行或已安排。这是一些外部依赖。如果它在数据库中,只要数据库已启动,您就可以确定作业已完成。

答案 1 :(得分:0)

嗯,首先,如果你想用Java做,你可以使用 Timer 进行简单的基本重复性工作,或者使用Quartz进行更高级的工作。

我个人也认为让相同的实体(应用程序)处理所有相关的数据库操作会更好。换句话说,如果您的Java应用程序正在读取/写入数据库,它应该是一致的,并且还要处理预定的读/写。另外,通过这种方式,您可以更轻松地同步您的操作,例如,如果您想确保计划的作业正在运行,已经启动,已经完成,那么如果所有操作都在Java中完成,则可以更轻松地执行此操作有一个不同的进程(如SQL Scheduler)这样做。