2017-07-24 45 views
2

我正在嘗試爲我的應用程序連接池遷移到HikariCP。目前,我想連接到Oracle數據庫。在HikariCP中使用來自TNSNAMES.ORA的設置

這裏是我使用的代碼:

 HikariConfig hc = new HikariConfig(); 
     hc.setUsername(username); 
     hc.setPassword(password); 
     hc.setDataSourceClassName("oracle.jdbc.pool.OracleDataSource"); 
     hc.addDataSourceProperty("serverName", TNS); 
     hc.addDataSourceProperty("portNumber", 1521); 
     hc.addDataSourceProperty("driverType", "thin"); 


     HikariDataSource hds = new HikariDataSource(hc); 
     hds.setPoolName("Pool::"+username+"@"+dbName); 

TNS的變量來自於我的配置,並引用存在於服務器上的TNSNAMES.ORA一個設置文件。

SERVER_1 = 
    (DESCRPTION = 
     (ADDRESS_LIST = 
       (ADDRESS = (PROTOCOL = TCP)(HOST = server01.intranet)(PORT = 1521)) 
     ) 
     (CONNECTION_DATA = 
       (SERVICE_NAME = SERVER1) 
     ) 
    ) 

代碼失敗,出現以下堆棧跟蹤:

INFO HikariPool-1 - Starting... 
ERROR HikariPool-1 - Exception during pool initialization. 
java.sql.SQLRecoverableException: Erreur d'E/S: The Network Adapter could not establish the connection 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:743) 
    at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666) 
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) 
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:566) 
    at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:317) 
    at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:241) 
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) 
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) 
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:443) 
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:514) 
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:111) 
    at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:72) 
    at com.test.commonlib.config.DbConfigReader.getDataSource(DbConfigReader.java:105) 
    at com.test.commonlib.config.DbConfigReader.getDataSource(DbConfigReader.java:31) 
    at com.test.module1.Module1.getConnectionModule1(Module1.java:258) 
    at com.test.module1.fileinjector.fd.loadConf(fd.java:583) 
    at com.test.module1.fileinjector.fd.<init>(fd.java:78) 
    at com.test.module1.fileinjector.fd.getInstance(fd.java:84) 
    at com.test.module1.Module1.init(Module1.java:78) 
    at com.test.module1.scripts.TestPerso.TestPerso.testModule1(TestPerso.java:2009) 
    at com.test.module1.scripts.TestPerso.TestPerso.main(TestPerso.java:145) 
Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection 
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:470) 
    at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:506) 
    at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:595) 
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:230) 
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1452) 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:496) 
    ... 20 more 
Caused by: java.net.UnknownHostException: SERVER_1 
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) 
    at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) 
    at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) 
    at java.net.InetAddress.getAllByName0(InetAddress.java:1276) 
    at java.net.InetAddress.getAllByName(InetAddress.java:1192) 
    at java.net.InetAddress.getAllByName(InetAddress.java:1126) 
    at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:120) 
    at oracle.net.nt.ConnOption.connect(ConnOption.java:159) 
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:428) 
    ... 25 more 
Exception in thread "main" com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: Erreur d'E/S: The Network Adapter could not establish the connection 
    at com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:543) 
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:535) 
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:111) 
    at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:72) 
    at com.test.commonlib.config.DbConfigReader.getDataSource(DbConfigReader.java:105) 
    at com.test.commonlib.config.DbConfigReader.getDataSource(DbConfigReader.java:31) 
    at com.test.module1.Module1.getConnectionModule1(Module1.java:258) 
    at com.test.module1.fileinjector.fd.loadConf(fd.java:583) 
    at com.test.module1.fileinjector.fd.<init>(fd.java:78) 
    at com.test.module1.fileinjector.fd.getInstance(fd.java:84) 
    at com.test.module1.Module1.init(Module1.java:78) 
    at com.test.module1.scripts.TestPerso.TestPerso.testModule1(TestPerso.java:2009) 
    at com.test.module1.scripts.TestPerso.TestPerso.main(TestPerso.java:145) 
Caused by: java.sql.SQLRecoverableException: Erreur d'E/S: The Network Adapter could not establish the connection 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:743) 
    at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666) 
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) 
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:566) 
    at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:317) 
    at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:241) 
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) 
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) 
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:443) 
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:514) 
    ... 11 more 
Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection 
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:470) 
    at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:506) 
    at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:595) 
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:230) 
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1452) 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:496) 
    ... 20 more 
Caused by: java.net.UnknownHostException: SERVER_1 
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) 
    at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) 
    at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) 
    at java.net.InetAddress.getAllByName0(InetAddress.java:1276) 
    at java.net.InetAddress.getAllByName(InetAddress.java:1192) 
    at java.net.InetAddress.getAllByName(InetAddress.java:1126) 
    at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:120) 
    at oracle.net.nt.ConnOption.connect(ConnOption.java:159) 
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:428) 
    ... 25 more 

是否任何人有任何運氣,使其在Oracle工作與TNS NAME?

+0

看起來它想要一個實際的主機名,而不是名稱定義TNSNAMES條目。嘗試將'TNS'設置爲'server01.hostname'而不是'SERVER_1'。 – schtever

+0

嘗試IP而不是server01.intranet – user7294900

+0

這些信息都已存儲在tnsnames.ora中,其中包含所有數據庫服務器的所有信息。此文件的目的是爲了避免手動編寫IP或DNS條目 – Shade

回答

0

你可以用JDBC URL,而不是工作:

dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver"); 
dataSource.setJdbcUrl("jdbc:oracle:thin:@server01.intranet:1521/SERVER1") 
+0

它的確行得通,即使我只是簡單地把 hc。 setJdbcUrl( 「JDBC:預言:瘦:@ Server_1的」)。不知怎的,用這種方法,我可以使用tnsnames.ora中的設置,如果不是從數據源配置 – Shade

+0

那麼這是一個更好的解決方案?你接受這個建議嗎? – user7294900

+0

我接受它,因爲我沒有任何其他解決方案,它確實工作。不過,我希望我可以使用沒有直接寫入jdbc url的數據源。我在github上打開了一個問題,誰知道:) – Shade

0

設置「oracle.net.tns_admin」系統屬性以指定TNSNAMES.ORA文件的目錄位置。

System.setProperty("oracle.net.tns_admin", "C:\\Development\\TNS_ADMIN"); 

如果你有TNS_ADMIN系統變量設置,你可以做到這一點在下面的方式

System.setProperty("oracle.net.tns_admin", System.getenv("TNS_ADMIN")); 
相關問題