无法从SpringBoot连接到CloudSQL

ldioqlga  于 2023-01-09  发布在  Spring
关注(0)|答案(1)|浏览(171)

假设

我们正在GoogleCloud的GCE上用SpringBoot开发一个WebAPI,我们已经确认Spring项目已经成功启动。
java 11
Spring2.7.6
MySQL 5.7

我们想要实现的目标

我想从SpringBoot连接到CloudSQL并从DB获取数据。

问题

我收到以下错误,无法连接。

SQLException: Access denied for user 'root'@'cloudsqlproxy~192.168.0.5' (using password: YES)

我所尝试的

1.在本地环境中连接已在本地环境中安装MySQL并已连接。
1.部署到GCE,通过Postman请求,检查响应(不使用DB)→通过Postman收到响应,OK

  1. SSH到GCE,使用mysql命令连接到MySQL →已连接并能够检查表内容,OK
    1.使用DB-〉连接的响应不起作用且NG

配置文件

build.gradle

Java
plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.6'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}
repositories {
    mavenCentral()
}
dependencies {
    // implementation 'org.springframework.boot:spring-boot-starter-security'
//  implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    // implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    // testImplementation 'org.springframework.security:spring-security-test'

    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.0'
    runtimeOnly 'mysql:mysql-connector-java'
    runtimeOnly 'com.google.cloud.sql:mysql-socket-factory-connector-j-8:1.0.15'
}
tasks.named('test') {
    useJUnitPlatform()
}

application.properties

database=mysql
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://google/<DB-Name>?cloudSqlInstance=<CONNECTION NAME>&socketFactory=com.google.cloud.sql.mysql.SocketFactory
spring.datasource.username=root
spring.datasource.password=<PASSWORD>

错误日志

2022-12-21 13:49:25.022 ERROR 1576 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'cloudsqlproxy~192.168.0.5' (using password: YES)
rur96b6h

rur96b6h1#

我可以使用以下设置进行连接。

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://CloudSQLIPAddress/DBname
spring.datasource.username=test_user
spring.datasource.password=Password

相关问题