Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SpringAsyncTaskExecutor更新DB好吗?_Java_Spring_Asynchronous - Fatal编程技术网

Java 使用SpringAsyncTaskExecutor更新DB好吗?

Java 使用SpringAsyncTaskExecutor更新DB好吗?,java,spring,asynchronous,Java,Spring,Asynchronous,我正在尝试从UI进行AJAX调用。这应该只是启动一个异步进程,根据几个条件更新数据库。使用它是否好: Spring异步任务执行器 未来任务 触发 或者还有其他更好的方法吗 不知道您的要求很难说,但是 如果您计划扩展,我将使用以下任一方法: 如果数据很重要(即您不想删除操作),并且您想支持Python等其他语言,则可以使用持久事务队列,如RabbitMQ或Redis 或者Akka,如果您不在乎删除操作/消息 TaskExecutor又名Java ExecutorService的问题在于它本质上

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

  • Spring异步任务执行器
  • 未来任务
  • 触发

  • 或者还有其他更好的方法吗

    不知道您的要求很难说,但是

    如果您计划扩展,我将使用以下任一方法:

    • 如果数据很重要(即您不想删除操作),并且您想支持Python等其他语言,则可以使用持久事务队列,如RabbitMQRedis
    • 或者Akka,如果您不在乎删除操作/消息
    TaskExecutor又名Java ExecutorService的问题在于它本质上是一个可变的内存中JVM队列(传递给它的可调用/可运行项可以有状态,也可以是可变的)。或者更好的方法是让队列中的消息自己运行

    使用ExecutorService,如果您的服务器停机,并且队列中有消息,您可以对消息说再见。当然,这个消息不能和其他进程共享

    另一方面,AkkaRabbitMQ而不是ExecutorService提供了更好的抽象,并且更易于扩展,因为它本质上是基于“事件”的。消息的行为与数据分离

    在不了解数据库的情况下,我只能猜测“触发器”是个坏主意


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

    在不了解你的需求的情况下很难判断,但是

    如果您计划扩展,我将使用以下任一方法:

    • 如果数据很重要(即您不想删除操作),并且您想支持Python等其他语言,则可以使用持久事务队列,如RabbitMQRedis
    • 或者Akka,如果您不在乎删除操作/消息
    TaskExecutor又名Java ExecutorService的问题在于它本质上是一个可变的内存中JVM队列(传递给它的可调用/可运行项可以有状态,也可以是可变的)。或者更好的方法是让队列中的消息自己运行

    使用ExecutorService,如果您的服务器停机,并且队列中有消息,您可以对消息说再见。当然,这个消息不能和其他进程共享

    另一方面,AkkaRabbitMQ而不是ExecutorService提供了更好的抽象,并且更易于扩展,因为它本质上是基于“事件”的。消息的行为与数据分离

    在不了解数据库的情况下,我只能猜测“触发器”是个坏主意


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

    为什么?队列的伸缩性比简单的java executor服务要好得多。问题是异步写入数据库。用户目前可能没有豪华或infra来使用队列。它们确实很棒,但考虑到环境,这是否可行,因此它们也需要一些工作量。为什么?队列的伸缩性比简单的java executor服务要好得多。问题是异步写入数据库。用户目前可能没有豪华或infra来使用队列。它们确实很棒,但考虑到具体情况,这是可行的,因此它们也需要一些工作?也,您希望该进程运行多长时间?应该修改该问题并重新打开IMHO,因为这是一个很好的问题,即在不阻塞给定用户界面的情况下更新数据库的一些实现选择是什么。Tomcat上的@PhilippeMarschall,该进程只需不到一分钟。@Daemonthread是的,但有5000个用户这样做一次最多只能在内存队列中包含5000个对象。。。更糟糕的情况是,有5000个线程试图同时运行。在我自己的web应用开发体验(IMHO)中。。。如果花费的时间超过几秒钟,我会将其推送到外部队列。@AdamGent您有设置RabbitMQ的链接吗?它是否作为一个单独的实例运行(只是为了检查AWS上的价格)?您使用的是哪台Java服务器?也,您希望该进程运行多长时间?应该修改该问题并重新打开IMHO,因为这是一个很好的问题,即在不阻塞给定用户界面的情况下更新数据库的一些实现选择是什么。Tomcat上的@PhilippeMarschall,该进程只需不到一分钟。@Daemonthread是的,但有5000个用户这样做一次最多只能在内存队列中包含5000个对象。。。更糟糕的情况是,有5000个线程试图同时运行。在我自己的web应用开发体验(IMHO)中。。。如果花费的时间超过几秒钟,我会将其推送到外部队列。@AdamGent您有设置RabbitMQ的链接吗?它是否作为一个单独的实例运行(只是为了检查AWS上的价格)?