Java同步Cron作业和Ajax请求

Java同步Cron作业和Ajax请求,java,ajax,synchronization,synchronized,Java,Ajax,Synchronization,Synchronized,我有一个cron作业,每5分钟执行一次。 cron作业从服务获取消息并存储到数据库中 在JSP页面上,每1分钟执行一次AJAX请求。 它根据时间检查数据库中的新消息 现在,我的问题是,有时这两个过程会交叉,这是因为AJAX请求无法获取某些消息 我已将此cron作业设置为已同步,但它仍然无法工作 我需要的是。。。当cron作业运行时,我需要保留ajaxhttp请求 请指导。您想在数据库中同步读写。 您不希望AJAX进程在cron作业插入消息表的同时读取该消息表 你的问题似乎是幻影阅读。 这可以通过

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

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

现在,我的问题是,有时这两个过程会交叉,这是因为AJAX请求无法获取某些消息

我已将此cron作业设置为已同步,但它仍然无法工作

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


请指导。

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

你的问题似乎是幻影阅读。 这可以通过使用数据库事务,特别是定义适当级别的事务隔离来避免。仅在隔离级别事务可序列化时才阻止幻象读取

Connection connection = DriverManager.getConnection(jdbcUrl, user, password);
connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
我相信您的AJAX请求会转到一个java组件,该组件使用jdbc在数据库中查找消息。如果您没有特别注意数据库事务,那么JDBC中的默认事务隔离级别取决于您的数据库

尝试将事务隔离级别设置为事务可序列化

Connection connection = DriverManager.getConnection(jdbcUrl, user, password);
connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
并非所有jdbc驱动程序都支持所有级别的事务隔离

有关更多信息,请查看此处:

Ajax推送引擎APE或Comet可能会对您有所帮助。问题是我需要在cron作业运行时暂停Ajax请求。