通过 google 代理将本地 spring 启动应用程序连接到 google 云 SQL

Connecting local spring boot app to google cloud SQL through google proxy

我是 Java/spring 引导新手,我正在尝试使用 google 的云 SQL 作为我项目的数据库。我已经下载了 google 代理并使用 google 云 SDK 进行了身份验证。当我启动代理并使用 SSMS 进行连接时,它可以正常连接并正常工作。问题是当我尝试通过 spring 启动应用程序连接时出现错误。我不确定我是否在应用程序属性中遗漏了某些东西,或者忘记导入依赖项或类似的东西。任何帮助,将不胜感激!我在下面包含了 applications.properties、build.gradle 和错误。谢谢!

Application.properties

spring.jpa.hibernate.ddl-auto=create spring.datasource.url=jdbc:mysql://127.0.0.1:1433/{DBNAME} spring.datasource.username={DMUSERNAME} spring.datasource.password={DMPASSWORD}

build.gradle

   id 'org.springframework.boot' version '2.2.1.RELEASE'
   id 'io.spring.dependency-management' version '1.0.8.RELEASE'
   id 'java'
}

group = '{GROUPNAME}'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
   compileOnly {
       extendsFrom annotationProcessor
   }
}

repositories {
   mavenCentral()
   maven { url 'https://repo.spring.io/milestone' }
}

ext {
   set('springCloudVersion', "Hoxton.RC2")
}

dependencies {
   implementation 'org.springframework.boot:spring-boot-starter-web'
   compileOnly 'org.projectlombok:lombok'
   annotationProcessor 'org.projectlombok:lombok'
   testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.1'
   testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.3.1'
   implementation 'org.springframework.cloud:spring-cloud-gcp-starter'
   implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
   runtime 'mysql:mysql-connector-java'
   implementation 'org.springframework.boot:spring-boot-starter-jdbc'

}

dependencyManagement {
   imports {
       mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
   }
}

test {
   useJUnitPlatform()
}

错误

  Caused by: java.net.ConnectException: Connection refused: no further information
  Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service 
  [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
  Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 
  'hibernate.dialect' not set
   Process 'command 'C:/Program Files/Java/jdk-13.0.1/bin/java.exe'' finished with non-zero exit value 1

您使用的是哪个数据库?你的问题被标记为 mysql.

1433 端口用于 Microsoft SQL 服务器。 SSMS 适用于 Microsoft SQL Server

您的连接字符串适用于 MySQL 而不是 SQL 服务器。

改变这个:

spring.datasource.url=jdbc:mysql://127.0.0.1:1433/{DBNAME}

为此:

spring.datasource.url=jdbc:sqlserver://127.0.0.1:1433/{DBNAME}

以上连接字符串使用 TCP 套接字(而不是 Unix 套接字)并要求云 SQL 代理也使用 TCP 套接字设置。例如,当您以 TCP Socket 模式启动 Cloud SQL Proxy 时,它应该如下所示:

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:1433

由于您已经通过 SSMS 成功连接,我假设您已经为 Cloud SQL 访问设置了正确的角色。