例外情况:
我的项目使用SpringBoot2.0和默认集成Hikari2.7.9。
配置自定义数据源:
@Bean(name = "xxOrderDSProperties")
@Qualifier("xxOrderDSProperties")
@ConfigurationProperties(prefix = "spring.datasource.datasource-xxorder")
public DataSourceProperties xxOrderDSProperties(){
return new DataSourceProperties();
}
@Bean(name = "xxorderDS")
@ConfigurationProperties(prefix = "spring.datasource.datasource-xxorder")
public DataSource dataSourcexxOrder(){
//return DruidDataSourceBuilder.create().build(); **//this could work**.
return xxOrderDSProperties().initializeDataSourceBuilder().build(); //**this throws above exception**
}
我调试了源代码,找到了抛出上述异常的代码:
try {
defaultTransactionIsolation = connection.getTransactionIsolation();
if (transactionIsolation == -1) {
transactionIsolation = defaultTransactionIsolation;
}
}
catch (SQLException e) {
LOGGER.warn("{} - Default transaction isolation level detection failed ({}).", poolName, e.getMessage());
if (e.getSQLState() != null && !e.getSQLState().startsWith("08")) {
throw e;
}
我发现连接只有一个名为“IsolationLevel”的属性,而不是“TransactionIsolation”,并且getTransactionIsolation总是得到异常。
然后我把它和德鲁伊做比较。德鲁伊可以跳过这个例外。并连接,执行sql操作成功。来自德鲁伊的代码:
try {
this.underlyingTransactionIsolation = conn.getTransactionIsolation();
} catch (SQLException e) {
// compartible for alibaba corba
if ("HY000".equals(e.getSQLState())
|| "com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException".equals(e.getClass().getName())) {
// skip
} else {
throw e;
}
}
找到原因了。我们使用atlas作为db中间件,在使用hikari getTransactionIsolation时,它不支持“select@@session.tx_isolation”命令。并且它将抛出异常“error 1105(HY000):Proxy Warning-Near”.“:语法错误”
但是,druid跳过这个语法异常。并可以执行以下sql成功操作。
解决方案:
HikariCP版本:2.7.9 JDK版本:1.80_111数据库:MySQL 例外: HikariPool-1-池初始化期间出现异常。2018-06-28 21:09:36.545 WARN 35084---[nio-8008-exec-2]c.z.h.p.PoolBase:HikariPool-1-默认事务隔离级别检测失败(代理警告-近“:语法错误)。JAVAsql。SQLException
本文向大家介绍MySQL的默认事务隔离级别是?相关面试题,主要包含被问及MySQL的默认事务隔离级别是?时的应答技巧和注意事项,需要的朋友参考一下 读未提交(RU): 一个事务还没提交时, 它做的变更就能被别的事务看到. 读提交(RC): 一个事务提交之后, 它做的变更才会被其他事务看到. 可重复读(RR): 一个事务执行过程中看到的数据, 总是跟这个事务在启动时看到的数据是一致的. 当然在可重复
问题内容: 考虑一下我正在使用的一些代码的简化视图: 我已经在类级别设置了注释。我理解这意味着必须在提供的事务中调用诸如之类的所有方法。在这种情况下,我们正在使用容器管理的事务。 在根本不被用于或…既没有类,也没有方法的水平。我明白这意味着并会为双方提供的事务中进行操作。 但是,我严重错过了 某些东西 !如代码注释所示,… 将数据写入数据库,然后读取该数据作为其操作的一部分。由于所有这些都在同一个
我有一个对具有 SQL API 的 Cosmos 容器的长期运行查询,该查询需要 10 分钟以上才能完成。有没有办法将数据库的隔离级别设置为“可重复读取”或“可序列化”,以避免幻像读取,如这里所定义的那样? 我知道我们可以为 Cosmos DB 设置一致性级别,但它仅适用于地质副本之间的读/写一致性,而不适用于事务隔离。
我将spring应用程序连接到smartbaer servicev,在那里创建了虚拟数据源(Postgres)。 驱动程序类: 连接字符串(本地servicev虚拟服务器url): 应用程序.属性:- spring.datasource.driver-class-name=com.smartbear.servicev.jdbc.driver.jdbcvirtdriver spring.dataso