具有锁定表的Spring只读事务

时间:2013-11-21 17:00:07

标签: java mysql spring transactions spring-jdbc

我的弹簧配置:

  <jee:jndi-lookup id="testDataSource" jndi-name="java:testDS" />

  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="testDataSource" />
  </bean>

  <tx:annotation-driven transaction-manager="transactionManager" />

我的Java方法:

@Transactional(readOnly = true)
public List find() {
  jdbcTemplate.query("SELECT * FROM my_table;");
}

如果我直接在数据库(MySQL)上使用以下脚本:

LOCK TABLES my_table WRITE;

然后尝试使用只读事务运行java代码,它仍在等待表解锁。

由于事务被设置为只读,它不应该返回数据吗?

由于

1 个答案:

答案 0 :(得分:1)

不,因为WRITE锁定会阻止任何没有持有锁定的人读取和写入表格。如果您改为READ,则可以执行查询。

BTW,readOnly没有在数据库中直接执行任何操作,它只是对ORM层的一个提示,即事务不会进行任何写入。