无法通过云数据流转换连接到云SQL

时间:2019-05-14 16:50:56

标签: java google-cloud-dataflow google-cloud-sql

在云数据流中运行时,我无法从自定义DoFn内部连接到云SQL。日志中显示的错误是:

  
      
  • 通过ssl套接字连接到Cloud SQL实例[]。
  •   
  • [Docbuilder-worker-exception]:com.zaxxer.hikari.pool.HikariPool $ PoolInitializationException:失败   初始化池:无法创建与数据库服务器的连接。
  •   

从appenginer句柄连接到Cloud sql时,相同的代码和配置可以正常工作。

我已明确给计算引擎服务帐户--compute@developer.gserviceaccount.com-Cloud SQL客户端,Cloud SQL查看器和编辑者角色。

任何帮助解决此问题的方法,将不胜感激!

2 个答案:

答案 0 :(得分:0)

要从外部应用程序连接到Cloud SQL,可以在文档如何从外部应用程序连接到Cloud SQL [1]中找到一些方法,您可以找到实现目标的替代方法和步骤。

[1] https://cloud.google.com/sql/docs/postgres/connect-external-app

答案 1 :(得分:0)

当尝试使用带有自定义DoFn的云数据流到云SQL的连接池时,我也遇到了很多问题。现在我不记得我的错误是否与您的错误相同,但是我的解决方案是像这样在DoFn类中创建@Setup方法:

static class ProcessDatabaseEvent extends DoFn<String, String> {
@Setup
public void createConnectionPool() throws IOException {
  final Properties properties = new Properties();
  properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties"));
  final String JDBC_URL = properties.getProperty("jdbc.url");
  final String JDBC_USER = properties.getProperty("jdbc.username");
  final String JDBC_PASS = properties.getProperty("jdbc.password");

  final HikariConfig config = new HikariConfig();
  config.setMinimumIdle(5);
  config.setMaximumPoolSize(50);
  config.setConnectionTimeout(10000);
  config.setIdleTimeout(600000);
  config.setMaxLifetime(1800000);
  config.setJdbcUrl(JDBC_URL);
  config.setUsername(JDBC_USER);
  config.setPassword(JDBC_PASS);

  pool = new HikariDataSource(config);
}

@ProcessElement
public void processElement(final ProcessContext context) throws IOException, SQLException {
//Your DoFn code here...
}