我正在使用 Derby 数据库并尝试同时创建数据库对象。
众所周知,其中默认的隔离级别是TRANSACTION_READ_COMMITTED。
但我不想让 DB 进行幻读,因此,我想将隔离级别设置为 TRANSACTION_SERIALIZABLE。
我所做的就是这段代码。
if(jdbcTemplate.getDataSource().getConnection().getTransactionIsolation() == Connection.TRANSACTION_READ_COMMITTED) {
logger.info("The connection isolation is already TRANSACTION_READ_COMMITTED");
}
else {
logger.info("Please set the connection isolation to TRANSACTION_READ_COMMITTED");
}
jdbcTemplate.getDataSource().getConnection().setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
if(jdbcTemplate.getDataSource().getConnection().getTransactionIsolation() == Connection.TRANSACTION_SERIALIZABLE) {
logger.info("The connection isolation is now TRANSACTION_SERIALIZABLE");
}
正如预期的那样,我看到日志为"The connection isolation is already TRANSACTION_READ_COMMITTED",但令人惊讶的是我没有看到"The connection isolation is now TRANSACTION_SERIALIZABLE"的日志。
此外,我期待的异常也会发生,它确认隔离级别未设置为可序列化。