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