需要使用Dataflow Job(Java代码(将数据写入Google Cloud PostgreSQL。此 PostgreSQL 实例已启用 SSL。所以想知道这个启用了SSL(客户端认证,密钥和服务器认证(的PostgreSQL数据库的连接字符串。如果没有 SSL,下面的连接字符串在数据流作业中工作正常。但想知道使用 SSL 的连接字符串。
JdbcIO.<KV<Integer,Integer>>write()
.withDataSourceConfiguration( DataSourceConfiguration.create("org.postgresql.Driver","jdbc:postgresql://<PrivateIP>:5432/db")
.withUsername("***")
.withPassword("password"))
您可以使用以下驱动程序属性配置与 PostgreSQL 的连接:sslcert
、sslkey
和sslrootcert
以指向不同的证书。
您还可以使用 Cloud SQL JDBC 套接字工厂,该工厂创建临时证书并自动使用它们。
下面的代码对我有用。
String conUrl="jdbc:postgresql://google/<dbName>?cloudSqlInstance=<InstanceName>&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=<UserName>&password=<PWD>";
p.apply(JdbcIO.<KV<Integer,Integer>>write()
.withDataSourceConfiguration( DataSourceConfiguration.create("org.postgresql.Driver",conUrl)
.withUsername(<UserName>)
.withPassword(<PWD>)
)
.withStatement("insert into public.testTable(id,order_number) values(?, ?)")
.withPreparedStatementSetter(new JdbcIO.PreparedStatementSetter<KV<Integer,Integer>>() {
public void setParameters(KV<Integer,Integer> element, PreparedStatement query)
throws SQLException {
query.setInt(1, element.getKey());
query.setInt(2, element.getValue());
}
})
);
这对我建立与 jdbcIO 的连接很有用
String conUrl="jdbc:postgresql://google/dbName?cloudSqlInstance=projectId:us-central1:databaseId&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=postgres&password=*****";