0
我的Spring配置:春只读锁住表交易
<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代码,它仍然在等待表unl ocked。
它不应该返回数据,因为事务设置为只读?
感谢
因此,当数据库中存在插入或更新时,它将锁定表以进行读取?有什么办法可以避免它? –
是的:根本不开始交易。但是,那么你的数据处于危险之中。了解这一点需要了解并发编程的基本原理。顺便说一句,取决于你使用的数据库引擎,你可能不需要锁定整个表格,而只能锁定你正在改变的行。 Mysql的Innodb引擎就是这样一个引擎。 – miljanm