在 Spring 中使用 HikariCP 连接到 Oracle DB 时发送应用程序名称

Posted

技术标签:

【中文标题】在 Spring 中使用 HikariCP 连接到 Oracle DB 时发送应用程序名称【英文标题】:Send application name when connecting to an Oracle DB using HikariCP in Spring 【发布时间】:2019-03-17 16:14:31 【问题描述】:

我有一个 Spring Boot 1.4.7 应用程序,我目前正在更新到版本 2.0.5。应用程序使用 JDBC 使用以下配置连接到 Oracle DB:

spring:
  jpa:
    database-platform: org.hibernate.dialect.Oracle12cDialect
  datasource:
    url: jdbc:oracle:thin:@<db_server>
    username: $credentials.database.username
    password: $credentials.database.password
    driver-class: oracle.jdbc.OracleDriver.class
    platform: oracle
    tomcat:
      connection-properties: v$session.program=$spring.application.name

将应用程序更新到 Spring Boot 2.0.5 后,发送到服务器的应用程序名称是 JDBC Thin Client 而不是 $spring.application.name。原因似乎是在 Spring 2.x 中切换到 HikariCP 作为默认连接池。我如何将此配置迁移到 Hikari,以允许我将 v$session.program 的自定义属性发送到数据库?

我尝试过的:

?ApplicationName=&lt;name&gt; 附加到 JDBC url。 this *** 问题中提到的解决方案 设置System.setProperty("oracle.jdbc.v$session.program", &lt;name&gt;) 在application.yml中设置spring.datasource.hikari.data-source-properties.v$session.program: &lt;name&gt;

【问题讨论】:

非常感谢!当我尝试设置 defaultRowPrefetch 这使 Oracle ojdbc8.jar 连接运行效率更高时,这对我有很大帮助! 【参考方案1】:

在 yaml 中,美元符号被转义。

spring.datasource.hikari.data-source-properties.v$session.program: <name>

com.zaxxer.hikari.HikariConfig : dataSourceProperties............password=<masked>, vsession.program=<name>

试试这个。

spring:
  datasource:
    hikari:
      data-source-properties: v$session.program=name

【讨论】:

这样就可以了。这意味着 yaml 中的所有内容都被转义了。 这似乎不起作用。您提到“转义”,但不要在您的答案中显示任何被转义的内容。【参考方案2】:

使用 HikariCP 池属性(Spring Boot 2 中的默认池)

spring:
  datasource:
    hikari:
      data-source-properties:
        v$session.program: MyAppName

【讨论】:

这似乎没有任何效果。【参考方案3】:

如果你想引用spring.application.name,你必须像这样使用它:

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

【讨论】:

以上是关于在 Spring 中使用 HikariCP 连接到 Oracle DB 时发送应用程序名称的主要内容,如果未能解决你的问题,请参考以下文章

PGPool 在 SpringBoot 应用程序中无法与 HikariCP 一起使用

HikariCP 的连接超时

使用 HikariCP 和 AWS Aurora Serverless 的连接池配置

Tomcat 8、HikariCP、Hibernate 和 MySQL

无法在 Spring Boot 中为 Hikari 设置 keepAlive Time 配置

在 Spring Boot 项目中使用 HikariCP 和 Hibernate 的更好方法