如何从云运行的Java应用程序连接到云SQL数据库?
我有一个Java/Vert.x应用程序部署为云运行容器。它运转良好。我试图访问我的云SQL MySQL实例,但没有用。只要我尝试连接到DB实例并创建数据源,我的应用程序就会挂起 我的云运行容器与具有云SQL客户端角色的服务帐户相关联 我在这里遵循了规范的GCP教程: 很明显,我在具体细节上交换了意见。以下是违规代码:如何从云运行的Java应用程序连接到云SQL数据库?,java,google-cloud-platform,google-cloud-sql,vert.x,google-cloud-run,Java,Google Cloud Platform,Google Cloud Sql,Vert.x,Google Cloud Run,我有一个Java/Vert.x应用程序部署为云运行容器。它运转良好。我试图访问我的云SQL MySQL实例,但没有用。只要我尝试连接到DB实例并创建数据源,我的应用程序就会挂起 我的云运行容器与具有云SQL客户端角色的服务帐户相关联 我在这里遵循了规范的GCP教程: 很明显,我在具体细节上交换了意见。以下是违规代码: private static final String PW = "mypassword"; private static final String CONN_NA
private static final String PW = "mypassword";
private static final String CONN_NAME = "/cloudsql/mydatabase-111222:us-west1:my-project";
private DataSource pool;
@Override
public void init() throws Exception {
LOGGER.info("MysqlRepo-init starting...");
// The configuration object specifies behaviors for the connection pool.
HikariConfig config = new HikariConfig();
LOGGER.info("MysqlRepo-init 1");
// Configure which instance and what database user to connect with.
config.setJdbcUrl(String.format("jdbc:mysql:///%s", "mydb"));
config.setUsername("root"); // e.g. "root", "postgres"
config.setPassword(PW); // e.g. "my-password"
// For Java users, the Cloud SQL JDBC Socket Factory can provide authenticated connections.
// See https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory for details.
config.addDataSourceProperty("socketFactory", "com.google.cloud.sql.mysql.SocketFactory");
config.addDataSourceProperty("cloudSqlInstance", CONN_NAME);
config.addDataSourceProperty("useSSL", "false");
LOGGER.info("MysqlRepo-init 2");
// Initialize the connection pool using the configuration object.
pool = new HikariDataSource(config);
LOGGER.info("MysqlRepo-init 3");
ResultSet rs = pool.getConnection().createStatement().executeQuery("SELECT COUNT(*) col FROM dual WHERE 1=1");
LOGGER.info("MysqlRepo-init Results = " + rs.getFetchSize());
LOGGER.info("...MysqlRepo-init done");
}
我的日志在“mysqlrepoinit2”处停止(除此之外,我还收到Vertx警告,我的主线程被阻塞)
关于我可能遗漏的内容有什么想法吗?问题似乎与从Vert.x垂直体调用此代码有关。当我直接从应用程序的main方法调用它时,我能够获得有用的日志消息,这些消息抱怨连接名的“/cloudsql/”部分。这提供了足够的信息来最终解决这个问题。问题似乎与从Vert.x垂直体调用此代码有关。当我直接从应用程序的main方法调用它时,我能够获得有用的日志消息,这些消息抱怨连接名的“/cloudsql/”部分。这提供了足够的信息来最终解决这个问题。我们的数据库是否有公共IP?错误日志是什么?根据我的Cloud SQL Overview dashboard,它既有一个公共IP地址,当然还有一个实例连接名称(我正试图使用这个名称进行连接)。到目前为止,我没有看到任何相关的错误日志。我们的数据库是否有公共IP?错误日志是什么?根据我的Cloud SQL Overview dashboard,它既有一个公共IP地址,当然还有一个实例连接名称(我正试图使用这个名称进行连接)。到目前为止,我没有看到任何相关的错误日志。