在上篇Docker部署Nacos & CoreDNS 实现动态DNS功能
中,我们通过Nacos和CoreDNS搭建了dns服务,本篇将结合Oracle JDBC进行实践验证。
1. 注册服务

将本机DNS服务器添加上自建服务的IP地址,不同操作系统添加方法参见:http://www.alidns.com/setup/
2. Java验证
//测试服务解析
System.out.println(InetAddress.getByName(site).getHostAddress());
输出:192.168.0.26;解析正常。
3. Oracle JDBC连接
原配置为:
spring.datasource.url=jdbc:oracle:thin:@192.168.0.26:1521/TEST
替换IP为服务名(域名):
spring.datasource.url=jdbc:oracle:thin:@db.oracle.xh:1521/TEST
报错如下:
org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Io 异常: Unknown host specified )] with root cause
java.sql.SQLException: Io 异常: Unknown host specified
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:414)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
使用service连接jdbc的方法不对。
解决办法
修改替换为( 注意:@后面加上// ):
spring.datasource.url=jdbc:oracle:thin:@//db.oracle.xh:1521/ORIEPAY
SID (no longer recommended by Oracle to be used):
jdbc:oracle:thin:[<user>/<password>]@<host>[:<port>]:<SID>
Services:
jdbc:oracle:thin:[<user>/<password>]@//<host>[:<port>]/<service>
TNSNames:
jdbc:oracle:thin:[<user>/<password>]@<TNSName>
4. 变动数据库地址
可根据具体情况采取不同方案:
- 变动IP后重启项目生效(连接池)
- 监听IP变动后,实现重启数据库连接池的逻辑
参考:
http://www.cnblogs.com/549294286/p/5307316.html
http://www.orafaq.com/wiki/JDBC
网友评论