字符串连接可以用于包含 SpEL 的应用程序 yml 值吗?

Chr*_*now 6 spring spring-el applicationcontext

我正在尝试定义一个 Spring 数据源 url,如下所示:

spring:
  datasource:
    url: "jdbc:${vcap.services.compose-for-mysql.credentials.uri}?useSSL=true&requireSSL=true&verifyServerCertificate=true"
    username: ${vcap.services.compose-for-mysql.credentials.username}
    password: ${vcap.services.compose-for-mysql.credentials.password}
    driver-class-name: com.mysql.jdbc.Driver
Run Code Online (Sandbox Code Playgroud)

哪里vcap.services.compose-for-mysql.credentials.uri设置为mysql://xxxx:xxxx@xxxx.1.dblayer.com:28018/compose.

我需要的网址如下所示:

jdbc:mysql://xxxx:xxxx@xxxx.1.dblayer.com:28018/compose?useSSL=true&requireSSL=true&verifyServerCertificate=true

然而,Spring 似乎无法处理这个问题:

无法获取 JDBC 连接;嵌套异常是 java.sql.SQLException: Driver:com.mysql.jdbc.Driver@6c6efbc8 returned null for URL:jdbc:${vcap.services.compose-for-mysql.credentials.uri}?useSSL=true&requireSSL=true&verifyServerCertificate=真的

有没有一种方法可以使用 yaml 文件构造 url,还是需要使用其他方法(例如 xml 配置)?


更新

我试过了:

url: ${'jdbc:'}${vcap.services.compose-for-mysql.credentials.uri}{'?useSSL=true&requireSSL=true&verifyServerCertificate=true'}

但得到错误:

java.lang.IllegalArgumentException: URL must start with 'jdbc'

还尝试过:

url: jdbc:${vcap.services.compose-for-mysql.credentials.uri}?useSSL=true&requireSSL=true&verifyServerCertificate=true

但得到错误:

Driver:com.mysql.jdbc.Driver@567443ab returned null for URL:jdbc:${vcap.services.compose-for-mysql.credentials.uri}?useSSL=true&requireSSL=true&verifyServerCertificate=true

小智 1

只需将您的 env 属性与字符串值连接起来

some:
  property: ${envVar}abc
Run Code Online (Sandbox Code Playgroud)

在你的情况下

spring:
  datasource:
    url: jdbc:${vcap.services.compose-for-mysql.credentials.uri}?useSSL=true&requireSSL=true&verifyServerCertificate=true
Run Code Online (Sandbox Code Playgroud)