为什么 hikari.data-source-properties 中的占位符设置不正确

Why is the placeholder not set properly in hikari.data-source-properties

我正在用占位符设置 hikari.data-source-properties,但占位符值没有被替换。它是一个基于 spring-boot 2.1.4.RELEASE 的应用程序。我的目的是设置会话属性,以便 DBA 可以识别我的应用程序。当前,当我从 DB

运行 SELECT PROGRAM FROM V$SESSION 时,我的连接得到默认的 JDBC Thin Client

下面是我 application.yml 文件中的内容

spring:
    datasource:
        url: "jdbc:oracle:thin:@machine:1521:service_name"
        driver-class-name: "oracle.jdbc.driver.OracleDriver"
        hikari.data-source-properties:
            v$session.program:${spring.application.name}

下面是我 bootstrap.yml 文件中的内容

spring:
    application:
        name: ms-db-service

当我查询 Oracle 数据库时,我注意到程序的值字面上是 ${spring.application.name},而不是预期值 ms-db-service

我试过下面的方法,逻辑结果相同:

public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
}

我尝试了以下项目以了解更多情况:

我的结论是 HikariCp 在占位符替换完成之前读取这些值。我不明白 spring-boot bean 生命周期

中替换和数据源 bean 创建发生的相对时间

我试图避免对 hikaricp 数据源使用 bean(不确定这是否能解决问题),因为我不想手动构建整个数据源,因为 hikari 支持大量属性。

那么,如何使用占位符在 application.yml 中设置 spring.datasource.hikari.data-source-properties。而且,还有其他方法可以分配 spring.application.name 来识别我当前的数据库连接吗?

你必须这样使用它:

spring:
  datasource:
    hikari:
      data-source-properties:
        "[v$session.program]": ${spring.application.name}