0

我正在为我的 r2dbc 连接使用带有 application.yml 文件的 URL 连接。我试图设置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 配置了connectTimeoutas的类型java.time.Duration。而且r2dbc-mysql,我正在使用它。

我可以通过 URL 方式使用 connectTimeout 属性吗?我不知道如何自动将其从字符串传输到java.time.Duration.

到目前为止,我看到大多数类型的连接属性值是字符串、整数、布尔值。据我所知,JDBC 配置了connectTimeoutas单元,ms因此我可以轻松地connectTimeout使用 URL 进行设置。r2dbc-spi为它选择Duration类型有什么原因吗?

4

1 回答 1

0

我发现从中可以解析 DurationStr ,因此使用格式0.8.2.RELEASE设置 connectTimeout 是可行的。PnDTnHnMn.nS

在 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
于 2020-08-13T04:38:16.577 回答