7

我正在使用 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 workingHow 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>

感谢任何建议或帮助!

4

2 回答 2

2

原来问题是由数据库服务器上的 etc/issue 文件的大小引起的。切换到较旧的 ojdbc6 驱动程序是一种可选的解决方案,或者减小 linux 框上的 etc/issue 的大小是另一种解决方案。

于 2018-03-01T22:05:23.963 回答
0

将网址更改为:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname.companyname.corp)(PORT=1500))(CONNECT_DATA=(SERVICE_NAME=servicename.companyname.com)))
于 2018-03-01T21:03:03.327 回答