在 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=<name>
附加到 JDBC url。
this *** 问题中提到的解决方案
设置System.setProperty("oracle.jdbc.v$session.program", <name>)
在application.yml中设置spring.datasource.hikari.data-source-properties.v$session.program: <name>
【问题讨论】:
非常感谢!当我尝试设置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 和 AWS Aurora Serverless 的连接池配置
Tomcat 8、HikariCP、Hibernate 和 MySQL