我有一个Java应用程序,它使用JDBC驱动程序连接到数据库。它碰巧是一个Postgres实例,但如果它存在,我正在寻找一般解决方案。
运行应用程序的服务器具有多个IP地址,所有这些都在同一子网中。 JDBC连接是使用' primary'建立的。服务器的IP。
我可以play with Linux networking stack使用辅助IP地址与数据库建立传出连接。
有没有办法以编程方式指定源IP 地址将用于我的JDBC连接?
上下文:我们希望在不触及数据库的情况下移动应用程序,数据库具有限制IP地址的规则,它将接受来自的连接。
我看到的唯一黑客就是建立SSL连接,并从自定义SSLSocketFactory返回绑定到辅助IP的新Socket。
答案 0 :(得分:3)
一些谷歌搜索表明它取决于特定的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
网址属性 - 只需创建普通的旧套接字,而不是SSL套接字。
(见https://jdbc.postgresql.org/documentation/head/connect.html#connection-parameters)
答案 1 :(得分:0)
以下 PR 添加功能以在 PostgreSQL JDBC 驱动程序上配置 localSocketAddress:https://github.com/pgjdbc/pgjdbc/pull/2082