带有 Oracle DB 的 Spring 启动项目有时会出现 IO 连接超时



我使用 Spring Boot + JPA 部署一个应用程序,并使用 Oracle DB 存储数据。有时我在使用该应用程序一段时间后在日志中收到此错误。

SQL Error: 17002, SQLState: 08006 - IO Error: Connection timed out

配置属性

server.port = 8095
# ===============================
# = DATA SOURCE
# ===============================
# Set here configurations for the database connection
spring.datasource.url=jdbc:oracle:thin:@//localhost:1521/xe
spring.datasource.username=root
spring.datasource.password=root
# Keep the connection alive if idle for a long time (needed in production)
spring.datasource.testWhileIdle=true
spring.datasource.validationQuery=SELECT 1
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

如果我autoReconnect=true添加到数据源 url,则在启动应用程序时出现错误。

SQL Error: 12514, SQLState: 08006
oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor
at oracle.net.ns.NSProtocolStream.negotiateConnection(NSProtocolStream.java:272)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:263)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1360)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486)
... 46 common frames omitted

有谁知道问题的根本原因以及如何解决它?谢谢。

从 SQLPlus 测试 Oracle DB 连接。另外,请检查您的 Oracle service_name在 tnsnames.ora 文件中是否有效。

例如,如果您在 tnsnames.ora 中有一个用户条目,如下所示:

采样用户 =

  (DESCRIPTION =
    (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = TCP)(HOST = <fqdnHostNameOrAddress>)(PORT = <validPORT>))
)
(CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = <OracleDBServiceName>)
)

(

然后使用 SQLPlus 进行测试,如下所示:

sqlplus user@SAMPLEUSER

最新更新