我使用 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