通过 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 访问设置了正确的角色。
我是 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 访问设置了正确的角色。