使用Spring AsyncTaskExecutor更新数据库是否合适?

时间:2012-09-23 18:41:46

标签: java spring asynchronous

我正在尝试从UI进行AJAX调用。这应该只是启动一个异步过程来根据几个条件更新数据库。使用起来很好:

  1. Spring AsyncTaskExecutor
  2. FutureTask
  3. 触发
  4. 或者还有其他更好的方法吗?

1 个答案:

答案 0 :(得分:1)

不知道你的要求很难说但是......:

如果您计划进行缩放,我会使用:

  • 如果数据很重要(例如您不想删除某个操作),您希望支持其他语言,例如 RabbitMQ Redis 等持久性事务性队列蟒。
  • Akka 如果您不关心删除操作/消息。

TaskExecutor又称Java ExecutorService的问题在于它本质上是一个可变的内存JVM队列(传递给它的callable / runnables可以具有状态并且可以是可变的)。或者更好的方法是将队列中的消息自行运行。

使用ExecutorService,如果服务器出现故障并且队列中有消息,您可以再见消息。当然,消息不能与其他进程共享。

另一方面,

Akka RabbitMQ 而不是ExecutorService提供了更好的抽象,并且更容易扩展,因为它基本上是“基于事件”的。消息的行为与数据分开。

在不知道你的数据库的情况下,我只能猜测“触发器”是一个坏主意。

我认为这是一个重要的问题,因为如果你在整个地方做错了(将异步的行为和状态结合起来),就很难进行切换。