问题描述
我正在将URL连接与application.yml文件一起用于r2dbc连接。
我尝试设置connectTimeout
属性,但出现此错误:
Caused by: java.lang.classCastException: class java.lang.String cannot be cast to class java.time.Duration (java.lang.String and java.time.Duration are in module java.base of loader 'bootstrap')
,然后检查r2dbc-spi是否将connectTimeout
的类型配置为java.time.Duration
。而我正在使用的r2dbc-MysqL
紧随其后。
我可以通过URL方式使用connectTimeout属性吗?我不知道如何自动将其从字符串传输到java.time.Duration
。
到目前为止,我看到大多数类型的连接属性值是字符串,整数,布尔值。据我所知,JDBC将connectTimeout
的单位配置为ms
,因此我可以轻松地将connectTimeout
设置为URL。 r2dbc-spi是否为此选择了Duration
类型?
解决方法
我发现,它从0.8.2.RELEASE
解析了DurationStr,因此使用PnDTnHnMn.nS
格式设置connectTimeout是可行的。
在MySqlConnectionFactoryProvider.java中:
mapper.from(CONNECT_TIMEOUT).asInstance(Duration.class,Duration::parse)
.into(builder::connectTimeout);
有一件事是,在0.8.2
下,它没有实现,但是我的pom.xml导入了0.8.1.RELEASE和0.8.2.RELEASE,尽管我没有定义任何0.8.1东西。所以spring用0.8.1
r2dbc:pool:mysql://host:port/db?connectTimeout=PT3S // 3 seconds