Java 使用群集类型主机时无法连接oracle数据库

Java 使用群集类型主机时无法连接oracle数据库,java,oracle,spring-boot,jdbctemplate,Java,Oracle,Spring Boot,Jdbctemplate,连接oracle DB时,我遇到以下错误,我使用spring boot JDBC模板连接到数据库。错误如下: Exception in thread "main" java.lang.Exception: java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection at com.falabella.util.OracleDB.mai

连接oracle DB时,我遇到以下错误,我使用spring boot JDBC模板连接到数据库。错误如下:

Exception in thread "main" java.lang.Exception: java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection
    at com.falabella.util.OracleDB.main(OracleDB.java:70)
Caused by: java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection
Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:392)
Caused by: java.net.UnknownHostException: NODE-01: nodename nor servname provided, or not known
下面是我的发现,我的数据库服务器主机有集群,它有两个节点,如下所示

   Cluster (wood.clsuter.com)
     |  NODE01 (wood-01)
     |  NODE02 (wood-02)
我的连接字符串如下:jdbc:oracle:thin:@wood clsuter.com:1531/service\u name

当我在连接字符串中使用集群名称时,我面临以下错误

Caused by: java.net.UnknownHostException: wood-01: nodename nor servname provided, or not known
然而,如果我在连接字符串中使用任何节点名称,能够连接数据库而不会出现任何问题,工作连接字符串如下所示,
jdbc:oracle:thin:@wood-01.com:1531/service\u name
jdbc:oracle:thin:@wood-02.com:1531/service\u name

因为我需要使用DB请求作为负载平衡,所以我需要使用集群名称而不是从节点

我想知道这个问题的根本原因,这种生产环境问题


您能帮我解决这个问题吗?

您需要将连接字符串更改为:

"jdbc:oracle:thin:@(DESCRIPTION=(FAILOVER=ON)(LOAD_BALANCE=ON)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=wood-01.com)(PORT = 1531))(ADDRESS = (PROTOCOL = TCP)(HOST = wood-02.com)(PORT = 1531)))(CONNECT_DATA=(SERVICE_NAME =service_name)(FAILOVER_MODE=(TYPE=select)(METHOD=basic))))"

您需要将连接字符串更改为:

"jdbc:oracle:thin:@(DESCRIPTION=(FAILOVER=ON)(LOAD_BALANCE=ON)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=wood-01.com)(PORT = 1531))(ADDRESS = (PROTOCOL = TCP)(HOST = wood-02.com)(PORT = 1531)))(CONNECT_DATA=(SERVICE_NAME =service_name)(FAILOVER_MODE=(TYPE=select)(METHOD=basic))))"

感谢您的回复,我想知道,这将如何工作?地址列表将如何工作?如果第一个地址失败,那么它会尝试连接第二个地址吗?还是总是尝试连接一个随机地址?感谢您的回复,我想知道,这将如何工作?地址列表将如何工作?如果第一个地址失败,那么它会尝试连接第二个地址吗?还是总是尝试连接一个随机地址?