当前位置: 首页 > 知识库问答 >
问题:

试图将spring boot应用程序部署到google cloud时,必须提供数据库名称

仲孙磊
2023-03-14

我正在谷歌云部署一个Spring启动网络应用程序。该应用程序在本地运行良好。我能够启动该应用程序,一切正常。但是当我尝试将其部署到谷歌云时,我得到了以下错误:

java。lang.IllegalArgumentException:必须提供数据库名称

我遵循本教程部署应用程序:https://www.baeldung.com/spring-boot-google-app-engine

有关错误的更多详细信息:

java.lang.IllegalStateException: Failed to load ApplicationContext

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration': Unsatisfied dependency expressed through constructor parameter 0;

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Unsatisfied dependency expressed through method 'dataSource' parameter 0;

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cloudSqlDataSourceProperties' defined in class path resource [org/springframework/cloud/gcp/autoconfigure/sql/GcpCloudSqlAutoConfiguration$CloudSqlDataSourcePropertiesConfiguration.class]: Unsatisfied dependency expressed through method 'cloudSqlDataSourceProperties' parameter 3;

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultMySqlJdbcInfoProvider' defined in class path resource [org/springframework/cloud/gcp/autoconfigure/sql/GcpCloudSqlAutoConfiguration$MySqlJdbcInfoProviderConfiguration.class]: Bean instantiation via factory method failed;

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.cloud.gcp.autoconfigure.sql.CloudSqlJdbcInfoProvider]: Factory method 'defaultMySqlJdbcInfoProvider' threw exception;

Caused by: java.lang.IllegalArgumentException: A database name must be provided.

app.yaml:

runtime: java
env: flex
runtime_config:
  jdk: openjdk8
env_variables:
  SPRING_PROFILES_ACTIVE: "gcp,mysql"
handlers:
  - url: /.*
    script: this field is required, but ignored
manual_scaling:
  instances: 1

application.properties:

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://35.***.***.**:3306/name_db
spring.datasource.username=root
spring.datasource.password=mypass
spring.datasource.initialization-mode=always
server.port = 8080
spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.MySQL5Dialect

application-gcp.properties:

spring.cloud.gcp.sql.instance-connection-name=name-project:us- 
central1:instance-name
spring.cloud.gcp.sql.database-name=name_db

Spring云引导。属性:

spring.cloud.appId=name-project

波姆。xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.activekids</groupId>
<artifactId>web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>web</name>
<description>Charity spring backend application</description>

<properties>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
    </dependency>
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.7.0</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

<profiles>
    <profile>
        <id>cloud-gcp</id>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Greenwich.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-gcp-starter</artifactId>
                <version>1.0.0.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
                <version>1.0.0.RELEASE</version>
            </dependency>
        </dependencies>
        <build>
            <finalName>${project.name}-gcp</finalName>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                </resource>
            </resources>
            <plugins>
                <plugin>
                    <groupId>com.google.cloud.tools</groupId>
                    <artifactId>appengine-maven-plugin</artifactId>
                    <version>1.3.2</version>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

共有2个答案

水浩歌
2023-03-14

我通过移动应用程序gcp中的所有内容解决了这个问题。应用程序的属性。财产。这样地:

(应用程序.属性)

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://35.***.***.**:3306/name_db
spring.datasource.username=root
spring.datasource.password=mypass
spring.datasource.initialization-mode=always
server.port = 8080
spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.MySQL5Dialect

#Here added:
spring.cloud.gcp.sql.instance-connection-name=name-project:us- 
central1:instance-name
spring.cloud.gcp.sql.database-name=name_db
弘阳德
2023-03-14

看起来发生这种情况是因为默认情况下启用了GCPSQL并期望正确的连接。但是如果您不需要它,例如在本地开发期间,只需在application.properties中禁用gsp sql:

spring.cloud.gcp.sql.enabled=false

对我来说有趣的是,在添加了spring cloud gcp starter secretmanager工件之后,同样的问题出现了。

 类似资料:
  • 问题内容: 如果我没有以编程方式设置任何内容,而只是调用并使用hibernate.properties(如下所示),那么一切都将很好。尝试以编程方式提供用户名,密码和连接URL时,我会收到奇怪的异常提示,提示是hbm文件。我想念什么? 按照@Kshitij的建议。进行混合模式。 *现在 *的hibernate.properties 是 编码 例外 我现在得到这个异常,我的hbm文件中的每个条目都有

  • 问题内容: 我写了一些代码来测试我的Hibernate配置,但是遇到了这样的错误消息: 我的文件结构如下: 这不是一个Web应用程序,它只是一个普通的Java项目。hibernate.cfg.xml如下所示: 主要功能中的代码如下: 根据错误消息,错误发生在 我是Hibernate的新用户,并且已经多次检查了我的配置文件。有谁可以帮助您找出问题所在?谢谢! 编辑:Hibernate版本是4.3.5

  • 我编写了一些代码来测试Hibernate的配置,但是我遇到了这样的错误消息: main函数中的代码如下所示: 根据错误消息,错误发生在 我是Hibernate的一个新用户,我已经检查了我的配置文件很多次了。有人能帮我找出问题所在吗?谢了!

  • 是否可以在不安装SQL Server的情况下在客户端计算机中安装应用程序? 在部署应用程序时可以包含数据库吗? 如果在部署时已在系统必备组件中选中SQL Server,是否可以在客户端的计算机上安装?

  • 完成干净的构建后,我将war文件复制到Tomcat的文件夹中。但是部署会发生两次,并且在上下文已经存在的情况下以异常结束。我错过了什么? 非常感谢您的帮助。

  • 我想为我的客户和API建立契约测试。我的API不能在本地运行,所以我希望能够在部署到生产之前,针对已部署的API临时版本运行提供程序测试。 我在网上看到的提供程序测试的大多数示例都使用了localhost。当尝试对我部署的HTTPSendpoint运行提供程序测试时,测试失败,显示。是不支持HTTPS协议,还是我遗漏了什么? 使用pact-provider-verifier cmd line工具工