我有一个用JDBC驱动程序连接到数据库的Java应用程序。它碰巧是Postgres实例,但是如果它存在的话,我正在寻找一个通用的解决方案。
运行应用程序的服务器具有多个IP地址,它们都位于同一子网中。JDBC连接是使用服务器的“主”IP建立的。
我可以用玩Linux网络栈向外连接到数据库,使用辅助IP地址。
是否有一种以编程方式指定源IP地址将用于我的JDBC?
上下文:我们想移动应用程序而不接触数据库,数据库有限制它将接受连接的IP地址的规则。
我看到的唯一黑客是建立一个SSL连接,并从自定义https://docs.oracle.com/javase/8/docs/api/javax/net/ssl/SSLSocketFactory.html返回一个绑定到辅助IP的新套接字。
发布于 2017-07-25 16:34:49
一些googling建议它依赖于特定的JDBC驱动程序。
对于MySQL,它是通过URL上的属性完成的:
jdbc:mysql://localhost:3306/sakila?localSocketAddress=123.33.33.33(见https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html)
在Postgres的例子中,看起来最好的选择是socketFactory URL属性--只创建普通的旧套接字,而不是SSL。
(见https://jdbc.postgresql.org/documentation/head/connect.html#connection-parameters)
发布于 2021-03-04 20:09:24
以下PR添加了在PostgreSQL JDBC驱动程序上配置PostgreSQL的特性:https://github.com/pgjdbc/pgjdbc/pull/2082
https://stackoverflow.com/questions/45308319
复制相似问题