美文网首页
使用DNS-F功能实现服务名(域名)连接数据库

使用DNS-F功能实现服务名(域名)连接数据库

作者: 咦咦咦萨 | 来源:发表于2019-04-10 10:28 被阅读0次

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

1. 注册服务

image.png

将本机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

相关文章

网友评论

      本文标题:使用DNS-F功能实现服务名(域名)连接数据库

      本文链接:https://www.haomeiwen.com/subject/nuwgiqtx.html