【发布时间】:2019-12-15 22:23:14
【问题描述】:
我希望在 Spring 4 应用程序中使用 JDBC SocketFactory 连接到 Google Cloud SQL。
pom.xml中的依赖有:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.1.1</version>
</dependency>
<dependency>
<groupId>com.google.cloud.sql</groupId>
<artifactId>postgres-socket-factory</artifactId>
<version>1.0.14</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.3.1</version>
</dependency>
applicationContext.xml 包含:
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="poolName" value="springHikariCP" />
<property name="connectionTestQuery" value="SELECT 1" />
<property name="dataSourceClassName" value="org.postgresql.ds.PGSimpleDataSource" />
<property name="maximumPoolSize" value="10" />
<property name="idleTimeout" value="30000" />
<property name="dataSourceProperties">
<props>
<prop key="url">jdbc:postgresql://google/mydb?cloudSqlInstance=projectId:region:instance&socketFactory=com.google.cloud.sql.postgres.SocketFactory</prop>
<prop key="user">postgres</prop>
<prop key="password">password</prop>
</props>
</property>
</bean>
但是当我运行应用程序时,我得到以下异常:
原因:java.lang.IllegalArgumentException: cloudSqlInstance 属性未设置。请在 JDBC URL 或 具有“项目:区域:实例”形式的值的连接属性 在 com.google.common.base.Preconditions.checkArgument(Preconditions.java:135)
这里可能出了什么问题?
【问题讨论】:
-
错误提示你的JDBC URL的云SQL实例没有写好。您应该提供一个实例连接名称,其一般结构为“myproject:region:myinstance”。您可以通过导航到 SQL 来在控制台中找到它,单击您要连接的实例并查找“连接到此实例”部分,您可以在其中复制您的实例连接名称。如果您想了解有关连接到 SQL 实例的更多信息,请阅读 github readme。
-
@ddworks 我在 URL 中提供 cloudSqlInstance=projectId:region:instance
-
@ddworks 根据这一行
<prop key="url">jdbc:postgresql://google/mydb?cloudSqlInstance=projectId:region:instance&amp;socketFactory=com.google.cloud.sql.postgres.SocketFactory</prop>似乎 OP 提供了 corerct 结构。 @user5155835 确保您将其替换为正确的值。 -
完整的 JDBC url 应该如下所示:
jdbc:postgresql://google/<DATABASE_NAME>?cloudSqlInstance=<INSTANCE_CONNECTION_NAME>&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=<POSTGRESQL_USER_NAME>&password=<POSTGRESQL_USER_PASSWORD>。您可以找到更多信息here
标签: java spring google-cloud-platform google-cloud-sql hikaricp