【问题标题】:JHipster and database connectionJHipster 和数据库连接
【发布时间】:2015-08-07 17:11:27
【问题描述】:

我正在使用 JHipster,当我运行 sudo mvn liquibase:diff 时出现以下错误

[INFO] Settings
----------------------------
[INFO]     driver: org.postgresql.Driver
[INFO]     url: jdbc:postgresql://localhost/gastos8
[INFO]     username: gastos8
[INFO]     password: *****
[INFO]     use empty password: false
[INFO]     properties file: null
[INFO]     properties file will override? false
[INFO]     prompt on non-local database? true
[INFO]     clear checksums? false
[INFO]     changeLogFile: src/main/resources/config/liquibase/master.xml
[INFO]     context(s): null
[INFO]     label(s): null
[INFO]     referenceDriver: null
[INFO]     referenceUrl: hibernate:spring:com.cboujon.domain?dialect=org.hibernate.dialect.PostgreSQL82Dialect
[INFO]     referenceUsername: null
[INFO]     referencePassword: null
[INFO]     referenceDefaultSchema: null
[INFO]     diffChangeLogFile: src/main/resources/config/liquibase/changelog/20150807132702_changelog.xml
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.554s
[INFO] Finished at: Fri Aug 07 13:27:12 ART 2015
[INFO] Final Memory: 18M/179M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.3.2:diff (default-cli) on project gastos8: Error setting up or running Liquibase: liquibase.exception.DatabaseException: org.postgresql.util.PSQLException: FATAL: password authentication failed for user "gastos8" -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

我不知道为什么[INFO] username: gastos8

这是我的配置文件:

application-dev.yml

spring:
    profiles:
        active: dev
    datasource:
        dataSourceClassName: org.postgresql.ds.PGSimpleDataSource
        url: 
        databaseName: gastos8
        serverName: localhost
        username: postgres
        password:  ---

    jpa:
        database-platform: org.hibernate.dialect.PostgreSQL9Dialect
        database: POSTGRESQL
        openInView: false
        show_sql: true
        generate-ddl: false
        hibernate:
            ddl-auto: none
            naming-strategy: org.hibernate.cfg.EJB3NamingStrategy
        properties:
            hibernate.cache.use_second_level_cache: true
            hibernate.cache.use_query_cache: false
            hibernate.generate_statistics: true
            hibernate.cache.region.factory_class: org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory

我做错了什么?

【问题讨论】:

    标签: maven jhipster liquibase


    【解决方案1】:

    Liquibase maven 插件不会读取 application.yml 来知道如何连接到您的数据库,它在您的 pom.xml 中有自己的配置。所以你必须把它放在那里。

    你为什么用 sudo 执行 maven? 现在,您可能拥有 root 拥有的项目文件,这通常是个坏主意。

    【讨论】:

    • 我找到了!但是我应该手动更改更改吗?如果我需要将应用程序部署到 prod 怎么办?我应该再次更改 pom.xml 吗?我什么时候应该在 application-dev.yml 中使用 spring > datasource?对不起,我是 JHipster 的新手。
    • Jhipster 的数据源与任何其他 java 数据源一样,没有什么特别之处,它被您的应用程序用来连接到您的数据库。 JHipster 开发不需要使用 maven liquibase。 JHipster 要求你对 Spring Boot、JPA 和 AngularJS 有一些基础知识。作为初学者,我建议您首先使用 H2(内存中的数据库)进行 dev 而不是 postgres,这是一个更简单的设置,您可以在以后更好地了解 JHipster 的工作原理时切换到 postgres。
    • @GaëlMarziou 我的 liquibase 总是尝试连接到本地主机数据库,即使我在 pom 中配置了远程服务器主机名,你能解释一下我的问题吗?谢谢
    • 打开一个新问题并提供详细信息
    【解决方案2】:

    正如在接受的答案中所说,maven 不读取 application.yml。

    但是,如果您对在 maven liquibase 插件定义中进行数据库配置感到不舒服,您可以使用 maven 属性和 liquibase 配置文件。

    1 - 在您的 liquibase-maven-plugin 配置中,添加 propertyFile

    <plugin>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-maven-plugin</artifactId>
        <version>${liquibase.version}</version>
        <configuration>
            <propertyFileWillOverride>true</propertyFileWillOverride>
            <propertyFile>src/main/resources/liquibase.properties</propertyFile>
        </configuration>
        (...)
    </plugin>
    

    2 - 在 src/main/resources 下的任意位置创建 liquibase 属性文件。例如, src/main/resources/config/liquibase :

    contexts:${liquibase.contexts}
    changeLogFile:src/main/resources/config/liquibase/master.xml
    driver:${dataSource.project.driverClass}
    url:${dataSource.project.jdbcURL}
    username:${dataSource.project.user}
    password:${dataSource.project.password}
    verbose:true
    dropFirst:false
    

    3 - 告诉 maven 过滤您的 liquibase 属性文件以用 maven 属性替换值。在&lt;build&gt;,让 maven 过滤你的 liquibase 配置文件:

    <build>
        <resources>
            <resource>
                <directory>src/main/resources/config/liquibase</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        (...)
    </build>
    

    4 - 为每个允许启动 liquibase 目标的配置文件添加 maven 属性:

    <profile>
        <id>dev</id>
        (...)
        <properties>
            <liquibase.contexts></liquibase.contexts>
            <dataSource.project.driverClass>org.mariadb.jdbc.Driver</dataSource.project.driverClass>
            <dataSource.project.jdbcURL>jdbc:mariadb://localhost:3306/yourDatabaseName</dataSource.project.jdbcURL>
            <dataSource.project.user>${datasource.username}</dataSource.project.user>
            <dataSource.project.password>${datasource.password}</dataSource.project.password>
        </properties>
    </profile>
    

    5 - 使用 maven 启动 liquibase 目标并在命令行中设置凭据:

    mvn resources:resources liquibase:update -Pdev -Ddatasource.username=root -Ddatasource.password=root
    

    来源:Liquibase Maven Documentation

    【讨论】:

    • 事实证明这对我有很大帮助。由于我是 JHipster 的新手,Jhipster 在应用程序 prod 和 dev.yml 文件中也有 jdbc url 和数据库用户名和密码。但您还必须在 liquibase 配置下的 pom.xml 文件中进行更新。否则事情将无法按预期进行。谢谢:)
    【解决方案3】:
    datasource:
            driver-class-name: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
            url: jdbc:mysql://database hosting address:3306/database Name?useUnicode=true characterEncoding=utf8
            name: database Name
            username: database user name 
            password: and put here database user password
    

    【讨论】:

    • 请考虑编辑您的答案以将代码格式化为代码(使用 Ctrl + K 或将行缩进 4 个空格),并请考虑稍微解释一下您的答案。就目前而言,您的回答目前很难阅读。解释您的答案为何有效将有助于您的答案更加有用,尤其是对任何正在学习的人。
    【解决方案4】:

    在文件 src/main/resources/config/application-dev.yml

    datasource:
            driver-class-name: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
            url: jdbc:mysql://localhost:3306/DBNAME?useUnicode=true characterEncoding=utf8
            name: DBNAME
            username: USERNAME 
            password: PWD
    

    你必须改变:

    DBNAME
    USERNAME 
    PWD
    

    别忘了改变生产方式

    src/main/resources/config/application-prod
    

    localhost 在网址中:jdbc:mysql://localhost:3306 到您的网址

    【讨论】:

    • 您可以通过解释上述代码如何以及为什么解决 OP 的问题来改进您的答案。只是转储一些没有解释的代码对于增加所有未来读者的理解帮助不大。
    猜你喜欢
    • 2020-12-21
    • 2016-05-21
    • 1970-01-01
    • 2021-02-09
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多