【问题标题】:Java Synchronized Cron Job and Ajax RequestJava 同步 Cron 作业和 Ajax 请求
【发布时间】:2013-10-02 16:46:00
【问题描述】:

我有一个每 5 分钟执行一次的 cron 作业。 cron 作业从服务中获取消息并存储到数据库中。

在 JSP 页面上,每 1 分钟执行一次 AJAX 请求。 它会根据时间检查数据库中的新消息。

现在,我的问题是有时这两个进程会交叉,并且由于 AJAX 请求未获取某些消息。

我已将此 cron 作业设为同步,但仍无法正常工作。

我需要的是......当 cron 作业运行时,我需要保持 AJAX HTTP 请求。

请指导。

【问题讨论】:

  • Ajax Push Engine APE 或 Comet 可以帮助您。
  • 问题是我需要在 cron 作业运行时暂停 ajax 请求。

标签: java ajax synchronization synchronized


【解决方案1】:

您希望在数据库中同步读取和写入。 您不希望 AJAX 进程在 cron 作业插入该表的同时从消息表中读取数据。

您的问题似乎是幻读。 这可以通过使用数据库事务,特别是定义适当的事务隔离级别来避免。幻读仅在隔离级别 TRANSACTION_SERIALIZABLE 时被阻止。

我相信您的 AJAX 请求会发送到使用 jdbc 在数据库中查找消息的 java 组件。如果您没有特别注意数据库事务,则 JDBC 中的默认事务隔离级别取决于您的数据库。

尝试将您的事务隔离级别设置为 TRANSACTION_SERIALIZABLE。

Connection connection = DriverManager.getConnection(jdbcUrl, user, password);
connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);

并非所有 jdbc 驱动程序都支持所有级别的事务隔离。

更多信息请看这里: http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 2018-06-07
    • 2012-07-04
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2012-02-28
    • 2011-09-08
    • 1970-01-01
    相关资源
    最近更新 更多