0

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

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

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

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

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

请指导。

4

1 回答 1

0

您希望在数据库中同步读取和写入。您不希望 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

于 2013-10-02T17:42:34.023 回答