首页 > 解决方案 > Gcp appengine 应用未正确连接到 Cloud sql 数据库

问题描述

我的 spring boot/kotlin 应用程序和数据库之间存在连接问题。我尝试遵循谷歌提供的指南和一些 Stackoverflow 帖子。我向用户添加了客户端/管理员 sql 权限。在此链接上遵循谷歌指南https://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample并重新创建一切照原样。我遇到了问题:部署的应用程序没有连接到实际的数据库,而是使用资源中的 data.sql 和 schema.sql 对象,它也没有对实际的数据库进行更改,但是在其他地方,例如我正在使用这个命令获取数据:

 @GetMapping("/getdata")
    fun getTuples(): List<String>? {
        return jdbcTemplate!!.queryForList("SELECT * FROM users").stream()
                .map { m: Map<String?, Any?> -> m.values.toString() }
                .collect(Collectors.toList())
    }

我得到的结果是示例中提供的结果:

0   "[luisao@example.com, Anderson, Silva]"
1   "[jonas@example.com, Jonas, Goncalves]"
2   "[fejsa@example.com, Ljubomir, Fejsa]"

Cloud 数据库中的实际用户表如下所示:

postgres=> select * from users;
       email        | first_name | last_name
--------------------+------------+-----------
 luisao@example.com | Anderson   | Silva
 jonas@example.com  | Jonas      | Goncalves
 fejsa@example.com  | Ljubomir   | Fejsa
 kkskldk            | sjndjfdf   | skdskd
(4 rows)

前 3 行是相同的,只是因为我手动添加了它们。应用程序没有看到数据库中的 DDL/DML 更改,只有我在 data.sql 或 schema.sql 中看到的那些。所以问题是哪里可能出现问题?在本文档中https://cloud.spring.io/spring-cloud-gcp/multi/multi__spring_jdbc.html说这种依赖关系应该自动完成大部分工作,但不知何故出了问题。难道是spring boot / hikari在appengine中创建了虚拟环境,它阻止了数据库连接,而你连接并只看到来自data.sql文件的Mock数据?还是问题出在配置上?我的 application.properties 文件:

server.error.include-message=always
spring.cloud.gcp.sql.database-name=[database name]
spring.cloud.gcp.sql.instance-connection-name=[Instance name]
spring.datasource.continue-on-error=true
spring.datasource.initialization-mode=always
spring.datasource.username=postgres
spring.datasource.password=[password]
spring.cloud.gcp.project-id=[project id]

标签: sql-serverspring-bootkotlingoogle-cloud-platform

解决方案


推荐阅读