我正在使用 spring boot 构建一个应用程序,需要通过服务而不是 sid 连接到 Oracle DB。
这些是数据源设置:
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@//hostname.companyname.corp:1500/servicename.companyname.com
spring.datasource.username=username
spring.datasource.password=password
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.OracleDialect
spring.jpa.properties.hibernate.default_schema=SCHEMA_NAME
我已经探讨了关于 tns 连接的其他两个响应: Connection to Oracle via TNS is not working 和 How to connect JDBC to tns oracle
但我遇到了一个不同的错误:
org.springframework.jdbc.support.MetaDataAccessException:无法获取用于提取元数据的连接;嵌套异常是 org.springframework.jdbc.CannotGetJdbcConnectionException: 无法获取 JDBC 连接;嵌套异常是 org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:339) ~[spring-jdbc-4.3.13.RELEASE.jar:4.3.13.RELEASE] 处的 java.sql.SQLException。 springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:366) ~[spring-jdbc-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.boot.autoconfigure.orm.jpa.DatabaseLookup .getDatabase(DatabaseLookup.java:72) ~[spring-boot-autoconfigure-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.boot.autoconfigure.orm.jpa.JpaProperties.determineDatabase(JpaProperties.爪哇:java:360) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.9.RELEASE .jar:1.5.9.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] 在 org.springframework。 boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at com.swift.cpms.CpmsWebApp.main(CpmsWebApp.java:18) [类/:na] 原因:org.springframework.jdbc.CannotGetJdbcConnectionException: 无法获得 JDBC 连接;嵌套异常是 org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) ~[spring-jdbc-4.3.13.RELEASE.jar:4.3.13.RELEASE] 的 java.sql.SQLException。弹簧框架。
如果我切换到调试模式,我会得到更多详细信息,并且紧随其后会发生异常:
2018-03-01 15:34:21.435 调试 44920 --- [主] osjdbc.datasource.DataSourceUtils:从数据源获取 JDBC 连接 2018-03-01 15:34:21.446 调试 44920 --- [
主] oatomcat.jdbc .pool.PooledConnection :使用类实例化驱动程序:oracle.jdbc.driver.OracleDriver [url=jdbc:oracle:thin:@//exa22-scan8.swift.corp:1500/cpmsdev_usr.swift.com] 2018-03-01 15:34:21.447 调试 44920 --- [main] oatomcat.jdbc.pool.ClassLoaderUtil:尝试从 sun.misc.Launcher$AppClassLoader@659e0bfd 加载类 [oracle.jdbc.driver.OracleDriver]
我使用相同的 URL、service_name 和凭据连接到 sqldeveloper 中的 DB,并且可以确认该部分是正确的。我还尝试了上述链接设置中建议的选项
System.setProperty("oracle.net.tns_admin", "C:/ora12/client_1/network/admin");
并设置 url @service_name 具有相同的结果
我完全不知道它的原因是什么 - 语法不正确还是其他什么?有没有其他人有任何建议可能导致它以及可能的解决方案是什么?
pom.xml 依赖项
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1</version>
</dependency>
</dependencies>
感谢任何建议或帮助!