在我的测试用例中,我有一个事务方法,它创建用户,然后在从数据库检索该用户的不同线程中调用异步方法。在下面的代码中,在db中找不到用户,dao返回null。如何确保不同线程的数据都在那里?冲洗似乎没有帮助。我需要手动提交吗?将隔离级别设置为READ_Uncommitted也没有帮助。
@Transactional public void createUser() { User user = new User(); user.setLogin("test"); userService.save(user); userService.flush(); logger.debug("New user id {}", user.getId()); //id=1 transactionalService.getUser(user.getId()); }
交易服务
@Async @Transactional public void getUser(Long id) { User user = userDao.getById(id); assertNotNull(user); }
确保您的数据库支持READ_UNCOMMITTED
隔离级别(以及脏读)
您测试的两个数据库(Postgres和Oracle)都只提供更高的隔离级别,不良现象更少。
博士后
https://www.postgresql.org/docs/9.3/sql-set-transaction.html
SQL标准定义了一个额外的级别READ UNCOMMITTED。在PostgreSQL中READ UNCOMMITTED被视为READ COMMITTED。
神谕
oracle允许未提交的读取选项吗?
事务在整个事务方法完成后提交。如果创建用户事务位于主事务中,则无法提交该事务。将以前的代码更改为类似这样的代码是可行的。
@Transactional public void createUser() { User user = transactionalService.createUser(); transactionalService.getUser(user.getId()); }
和交易服务
@Transactional(propagation=Propagation.REQUIRES_NEW) public void createUser() { User user = new User(); user.setLogin("test"); userService.save(user); logger.debug("New user id {}", user.getId()); //id=1 return user } @Async @Transactional public void getUser(Long id) { User user = userDao.getById(id); assertNotNull(user); }
我有一个cron作业每30秒运行一次,检查未结束的游戏。我将用于固定线程池。cron作业调用此方法: 其中是。在方法内部,我在循环中调用一个api,直到没有下一个页面。在这个方法中,我想更新数据库,以记住我最后看到的页面。 是否可以在一个线程中更新数据库,然后启动另一个线程,其中数据库再次更新?
我的问题与这个老问题很相似,但没有令人满意的答案贴在那里。 在DB2中有一个DB表,我试图通过两个或多个单独的Java线程对其进行并行记录读取,前提是这些线程应该读取不同的数据集,即如果线程1读取了前1000条记录,线程2不应该选择这些记录,而是选择不同的1000条记录(如果可用的话)。 由于线程将读取不同的行,因此在读取时不会发生冲突。Connection对象也不会在线程之间共享--它们将使用自
我在C 11应用程序中有长时间运行的功能,基本上是。我需要通知这个函数在不同线程中出现。要求: 可以随时上升。 应用程序最多只能在一个地方处理(也可以不处理)。 它不需要超快速执行,也不需要延迟执行 截至目前,我考虑了两种选择: 传递包含。然后在<code>sub_main</code>内定期轮询对象,以了解新的<code>情况</code>。轮询对象已从队列中删除。当应用程序决定不处理特定位置的
问题内容: 我通过一个会话连接到数据库。在整个程序中,我总是有相同的会话。我的线程“ 1”从数据库中捕获主要数据。必须允许用户取消该线程。因此,如果用户频繁或快速按下“取消”按钮(这是我的解释),则会发生以下错误: 如果我取消线程“ 1”完成并尝试从数据库加载另一个主数据集后在后台运行的线程“ 2”,则会发生相同的错误。 我在两个线程中使用同一会话的失败是吗? 解决此类问题的正确方法是什么? 问题
我仍然是java和spring的初学者,我已经在mysql中存储了一个名为< code>Offers的表,我试图逐行获取数据< code >其中Status == 0,我的表看起来像这样: 当我尝试运行我的代码时,它的返回 org.springframework.beans.factory。BeanCreationException:创建在类路径资源[org/springframework/boo