【问题标题】:Grails and Google app engine deployment errorsGrails 和 Google 应用引擎部署错误
【发布时间】:2021-02-03 22:04:20
【问题描述】:

我有Grails 3.3.11 应用程序,我正在尝试将它部署在灵活的Google App Engine 上,但是,我有一些错误主要是由于连接到Google cloud SQL 而产生的,我在上面创建了MySQL 5.7 实例并且能够从我的 IDE 访问它,当我在本地运行应用程序时,我搜索了一些解决这些错误的方法,但不幸的是,对我没有任何帮助,这里有例外情况

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'methodValidationPostProcessor' defined in class path resource [org/springframework/boot/autoconfigure/validation/ValidationAutoConfiguration.class]: Unsatisfied dependency expressed through method 'methodValidationPostProcessor' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastoreServiceRegistry': Cannot resolve reference to bean 'hibernateDatastore' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastore': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.orm.hibernate.HibernateDatastore]: Constructor threw exception; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to check JDBC Connection auto-commit in preparation for DDL execution
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:467)
    at 

org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:46)
"

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
Caused by: java.net.ConnectException: Connection timed out (Connection timed out)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:299)     

这是application.yml中的生产配置

dataSource:
      
        dbCreate: create-drop
        driverClassName: com.mysql.jdbc.Driver 
        dialect: org.hibernate.dialect.MySQL5Dialect
        username: myUsername
        password: myPassword
        url: jdbc:mysql://DBIP:3306/CusOrderIns 

        properties:
            jmxEnabled: true
            initialSize: 5
            maxActive: 50
            minIdle: 5
            maxIdle: 25
            maxWait: 10000
            maxAge: 600000
            timeBetweenEvictionRunsMillis: 5000
            minEvictableIdleTimeMillis: 60000
            validationQuery: SELECT 1
            validationQueryTimeout: 3
            validationInterval: 15000
            testOnBorrow: true
            testWhileIdle: true
            testOnReturn: false
            jdbcInterceptors: ConnectionState
            defaultTransactionIsolation: 2 

build.gradle

buildscript {
repositories {
    mavenLocal()
    maven { url "https://repo.grails.org/grails/core" }
}
dependencies {
    classpath "org.grails:grails-gradle-plugin:$grailsVersion"
    classpath "com.bertramlabs.plugins:asset-pipeline-gradle:2.15.1"
    classpath "org.grails.plugins:hibernate5:${gormVersion - ".RELEASE"}"
    classpath 'com.google.cloud.tools:appengine-gradle-plugin:1.3.2'
 }
}

provided "org.springframework.boot:spring-boot-starter-jetty" 
 // provided  "org.springframework.boot:spring-boot-starter-tomcat"  //commented

src\main\appengine\app.yaml 中的应用引擎配置

runtime: java
env: flex

runtime_config:
  jdk: openjdk8
  server: jetty9

resources:
  cpu: 2
  memory_gb: 5
  disk_size_gb: 10

manual_scaling:
  instances: 1

Google IAM 中的应用引擎服务帐号角色:

Cloud SQL Admin
Cloud SQL Client
Cloud SQL Editor
Cloud SQL Instance User
Editor
Cloud Run Admin

可能有什么遗漏或未配置?

【问题讨论】:

    标签: google-app-engine grails google-cloud-platform google-cloud-sql


    【解决方案1】:

    我正在关注这个 Google Cloud Community documentation,关于将 Grails 应用部署到 App Engine 柔性环境。如果您仍然无法使用 Cloud SQL 的 IP 地址进行连接,请尝试使用 url 中的 Cloud SQL 实例的实例连接名称 dataSourcebuild.gradle 中的其他 MYSQL 依赖项:

    application.yml

    production:
        dataSource:
            dbCreate: update
            dialect: org.hibernate.dialect.MySQL5InnoDBDialect
            driverClassName: com.mysql.cj.jdbc.Driver
            url: jdbc:mysql://google/[DATABASE_NAME]?socketFactory=com.google.cloud.sql.mysql.SocketFactory&cloudSqlInstance=[INSTANCE_NAME]&useSSL=true
            username: root
            password: password
    
    
    • 对于[DATABASE_NAME],请使用您在创建数据库时使用的数据库名称。
    • 对于 [INSTANCE_NAME],请使用您的实例名称,该名称在您的 Cloud SQL 实例详细信息中可见。

    添加于build.gradle

    runtime 'mysql:mysql-connector-java:8.0.16'
    runtime 'com.google.cloud.sql:mysql-socket-factory-connector-j-8:1.0.14'
    

    【讨论】:

    • 我按照提供的文档进行操作,现在工作正常,问题是我的DbNameInstanceName 完全不同,因为我将两者都命名为相同的名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    相关资源
    最近更新 更多