【问题标题】:What is up to date method to set database in Grails 3?在 Grails 3 中设置数据库的最新方法是什么?
【发布时间】:2016-11-03 03:18:16
【问题描述】:

如何在 Grails 3 中设置数据库?手册在这里看起来已经过时了:http://grails.github.io/grails-doc/3.0.x/guide/single.html#dataSource

因为它给出了一个使用 Grove 代码设置的示例,如下所示:

dataSource {
    pooled = true
    dbCreate = "update"
    url = "jdbc:mysql://localhost:3306/my_database"
    driverClassName = "com.mysql.jdbc.Driver"
    dialect = org.hibernate.dialect.MySQL5InnoDBDialect
    username = "username"
    password = "password"
    ...

虽然我有 application.yml

dataSource:
    pooled: true
    jmxExport: true
    driverClassName: org.h2.Driver
    username: sa
    password:

什么方法是最新的?

【问题讨论】:

标签: grails datasource grails-3.0


【解决方案1】:

这是一个包含多个数据源的当前 postgres 示例。我发现冗余是必要的,因为 grails、spring 和 hibernate 期望看到配置信息的级别存在一些差异。这让他们都满意。还包括您的 jdbc 驱动程序的运行时依赖项。对于 postgres,它是

dependencies {
    // all other dependencies

    runtime "org.postgresql:postgresql:9.4.1208"
}

[application.yml 文件的开始。是的,'---' 行需要在那里。他们让 configslurper 不会感到困惑。]

---
hibernate:
    cache:
        queries: true
        use_second_level_cache: true
        use_query_cache: true
        region.factory_class: 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory'
    dialect: org.hibernate.dialect.H2Dialect

dataSources:
    hibernate:
        cache:
            queries: true
            use_second_level_cache: true
            use_query_cache: true
            region.factory_class: 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory'
        dialect: org.hibernate.dialect.H2Dialect

    dataSource:
        pooled: true
        jmxExport: true
        driverClassName: org.postgresql.Driver
        driver_class: org.postgresql.Driver
        username: user
        password: pw
        dialect: org.hibernate.dialect.PostgreSQLDialect
        hibernate:
            cache:
                queries: true
                use_second_level_cache: true
                use_query_cache: true
                region.factory_class: 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory'
            dialect: org.hibernate.dialect.PostgreSQLDialect
            connection.driver_class: org.postgresql.Driver
            connection.url: jdbc:postgresql://ec2-1-2-3-4.compute-1.amazonaws.com:5432/dbone
            connection.username: user
            connection.password: pw
            connection.pool_size: 15
            connection.dialect: org.hibernate.dialect.PostgreSQLDialect
            driver_class: org.postgresql.Driver
            url: jdbc:postgresql://ec2-1-2-3-4.compute-1.amazonaws.com:5432/dbone
            username: user
            password: pw
            pool_size: 15
            driverClassName: org.postgresql.Driver

    dataSource_two:
        pooled: true
        jmxExport: true
        driverClassName: org.postgresql.Driver
        driver_class: org.postgresql.Driver
        username: usertwo
        password: pw
        dialect: org.hibernate.dialect.PostgreSQLDialect
        hibernate:
            cache:
                queries: true
                use_second_level_cache: true
                use_query_cache: true
                region.factory_class: 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory'
            dialect: org.hibernate.dialect.PostgreSQLDialect
            connection.driver_class: org.postgresql.Driver
            connection.url: jdbc:postgresql://ec2-1-2-3-4.compute-1.amazonaws.com:5432/dbtwo
            connection.username: usertwo
            connection.password: pw
            connection.pool_size: 15
            connection.dialect: org.hibernate.dialect.PostgreSQLDialect
            driver_class: org.postgresql.Driver
            url: jdbc:postgresql://ec2-1-2-3-4.compute-1.amazonaws.com:5432/dbtwo
            username: usertwo
            password: pw
            pool_size: 15
            driverClassName: org.postgresql.Driver

    dataSource_three:
        pooled: true
        jmxExport: true
        driverClassName: org.postgresql.Driver
        driver_class: org.postgresql.Driver
        username: userthree
        password: pw
        dialect: org.hibernate.dialect.PostgreSQLDialect
        hibernate:
            cache:
                queries: true
                use_second_level_cache: true
                use_query_cache: true
                region.factory_class: 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory'
            dialect: org.hibernate.dialect.PostgreSQLDialect
            connection.driver_class: org.postgresql.Driver
            connection.url: jdbc:postgresql://ec2-1-2-3-4.compute-1.amazonaws.com:5432/dbthree
            connection.username: userthree
            connection.password: pw
            connection.pool_size: 15
            connection.dialect: org.hibernate.dialect.PostgreSQLDialect
            driver_class: org.postgresql.Driver
            url: jdbc:postgresql://ec2-1-2-3-4.compute-1.amazonaws.com:5432/dbthree
            username: userthree
            password: pw
            pool_size: 15
            driverClassName: org.postgresql.Driver

environments:
    local:
        hibernate:
            cache:
                queries: true
                use_second_level_cache: true
                use_query_cache: true
                region.factory_class: 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory'
            dialect: org.hibernate.dialect.H2Dialect
        dataSources:
            hibernate:
                cache:
                    queries: true
                    use_second_level_cache: true
                    use_query_cache: true
                    region.factory_class: 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory'
                dialect: org.hibernate.dialect.H2Dialect
            dataSource:
                dbCreate: create
                url: jdbc:postgresql://127.0.0.1:5432/dbone
                driver_class: org.postgresql.Driver
                driverClassName: org.postgresql.Driver
                username: userone
                password: pw
                pool_size: 15
                dialect: org.hibernate.dialect.PostgreSQLDialect
                logSql: true
                hibernate:
                    cache:
                        queries: true
                        use_second_level_cache: true
                        use_query_cache: true
                        region.factory_class: 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory'
                    dialect: org.hibernate.dialect.PostgreSQLDialect
                    connection.driver_class: org.postgresql.Driver
                    connection.url: jdbc:postgresql://127.0.0.1:5432/dbone
                    connection.username: userone
                    connection.password: pw
                    connection.pool_size: 15
                    connection.dialect: org.hibernate.dialect.PostgreSQLDialect
                    driver_class: org.postgresql.Driver
                    url: jdbc:postgresql://127.0.0.1:5432/dbone
                    username: userone
                    password: pw
                    pool_size: 15
                    driverClassName: org.postgresql.Driver

            dataSource_two:
                dbCreate: create
                url: jdbc:postgresql://127.0.0.1:5432/dbtwo
                driver_class: org.postgresql.Driver
                driverClassName: org.postgresql.Driver
                username: usertwo
                password: pw
                pool_size: 15
                dialect: org.hibernate.dialect.PostgreSQLDialect
                logSql: true
                hibernate:
                    cache:
                        queries: true
                        use_second_level_cache: true
                        use_query_cache: true
                        region.factory_class: 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory'
                    dialect: org.hibernate.dialect.PostgreSQLDialect
                    connection.driver_class: org.postgresql.Driver
                    connection.url: jdbc:postgresql://127.0.0.1:5432/dbtwo
                    connection.username: usertwo
                    connection.password: pw
                    connection.pool_size: 15
                    connection.dialect: org.hibernate.dialect.PostgreSQLDialect
                    driver_class: org.postgresql.Driver
                    url: jdbc:postgresql://127.0.0.1:5432/dbtwo
                    username: usertwo
                    password: pw
                    pool_size: 15
                    driverClassName: org.postgresql.Driver
            dataSource_three:
                dbCreate: create
                url: jdbc:postgresql://127.0.0.1:5432/dbthree
                driver_class: org.postgresql.Driver
                driverClassName: org.postgresql.Driver
                username: userthree
                password: pw
                pool_size: 15
                dialect: org.hibernate.dialect.PostgreSQLDialect
                logSql: true
                hibernate:
                    cache:
                        queries: true
                        use_second_level_cache: true
                        use_query_cache: true
                        region.factory_class: 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory'
                    dialect: org.hibernate.dialect.PostgreSQLDialect
                    connection.driver_class: org.postgresql.Driver
                    connection.url: jdbc:postgresql://127.0.0.1:5432/dbthree
                    connection.username: userthree
                    connection.password: pw
                    connection.pool_size: 15
                    connection.dialect: org.hibernate.dialect.PostgreSQLDialect
                    driver_class: org.postgresql.Driver
                    url: jdbc:postgresql://127.0.0.1:5432/dbthree
                    username: userthree
                    password: pw
                    pool_size: 15
                    driverClassName: org.postgresql.Driver

    development:
        hibernate:
            cache:
                queries: true
                use_second_level_cache: true
                use_query_cache: true
                region.factory_class: 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory'
            dialect: org.hibernate.dialect.H2Dialect
        dataSources:
            hibernate:
                cache:
                    queries: true
                    use_second_level_cache: true
                    use_query_cache: true
                    region.factory_class: 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory'
                dialect: org.hibernate.dialect.H2Dialect
            dataSource:
                dbCreate: create-drop
                url: jdbc:postgresql://ec2-1-2-3-4.compute-1.amazonaws.com:5432/dbone
                driver_class: org.postgresql.Driver
                driverClassName: org.postgresql.Driver
                username: userone
                password: pw
                pool_size: 15
                dialect: org.hibernate.dialect.PostgreSQLDialect
                hibernate:
                    cache:
                        queries: true
                        use_second_level_cache: true
                        use_query_cache: true
                        region.factory_class: 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory'
                    dialect: org.hibernate.dialect.PostgreSQLDialect
                    connection.driver_class: org.postgresql.Driver
                    connection.url: jdbc:postgresql://ec2-1-2-3-4.compute-1.amazonaws.com:5432/dbone
                    connection.username: userone
                    connection.password: pw
                    connection.pool_size: 15
                    connection.dialect: org.hibernate.dialect.PostgreSQLDialect
                    driver_class: org.postgresql.Driver
                    url: jdbc:postgresql://ec2-1-2-3-4.compute-1.amazonaws.com:5432/dbone
                    username: userone
                    password: pw
                    pool_size: 15
                    driverClassName: org.postgresql.Driver

            dataSource_two:
                dbCreate: create-drop
                url: jdbc:postgresql://ec2-1-2-3-4.compute-1.amazonaws.com:5432/dbtwo
                driver_class: org.postgresql.Driver
                driverClassName: org.postgresql.Driver
                username: usertwo
                password: pw
                pool_size: 15
                dialect: org.hibernate.dialect.PostgreSQLDialect
                hibernate:
                    cache:
                        queries: true
                        use_second_level_cache: true
                        use_query_cache: true
                        region.factory_class: 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory'
                    dialect: org.hibernate.dialect.PostgreSQLDialect
                    connection.driver_class: org.postgresql.Driver
                    connection.url: jdbc:postgresql://ec2-1-2-3-4.compute-1.amazonaws.com:5432/dbtwo
                    connection.username: usertwo
                    connection.password: pw
                    connection.pool_size: 15
                    connection.dialect: org.hibernate.dialect.PostgreSQLDialect
                    driver_class: org.postgresql.Driver
                    url: jdbc:postgresql://ec2-1-2-3-4.compute-1.amazonaws.com:5432/dbtwo
                    username: usertwo
                    password: pw
                    pool_size: 15
                    driverClassName: org.postgresql.Driver
            dataSource_three:
                dbCreate: create-drop
                url: jdbc:postgresql://ec2-1-2-3-4.compute-1.amazonaws.com:5432/dbthree
                driver_class: org.postgresql.Driver
                driverClassName: org.postgresql.Driver
                username: userthree
                password: pw
                pool_size: 15
                dialect: org.hibernate.dialect.PostgreSQLDialect
                hibernate:
                    cache:
                        queries: true
                        use_second_level_cache: true
                        use_query_cache: true
                        region.factory_class: 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory'
                    dialect: org.hibernate.dialect.PostgreSQLDialect
                    connection.driver_class: org.postgresql.Driver
                    connection.url: jdbc:postgresql://ec2-1-2-3-4.compute-1.amazonaws.com:5432/dbthree
                    connection.username: userthree
                    connection.password: pw
                    connection.pool_size: 15
                    connection.dialect: org.hibernate.dialect.PostgreSQLDialect
                    driver_class: org.postgresql.Driver
                    url: jdbc:postgresql://ec2-1-2-3-4.compute-1.amazonaws.com:5432/dbthree
                    username: userthree
                    password: pw
                    pool_size: 15
                    driverClassName: org.postgresql.Driver

---
---
[ this is not the end of the application.yml, just the end of the datasource section.]

【讨论】:

  • 从带有新 GORM 6 的 grails 3.2.2 开始,不再需要这种“额外”配置,事实上,它不适用于 grails 3.2.2+。请参阅下面的修订答案。
【解决方案2】:

从带有 GORM 6 的 grails 3.2.2 开始,grails 文档是最新且正确的,并且不再需要在 4 月 7 日的第一个答案日期中显示的这个“额外”配置。一个示例数据源配置是:

---
---
dataSources:
    hibernate:
        cache:
            queries: true
            use_second_level_cache: true
            use_query_cache: true
            region.factory_class: 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory'

    dataSource:
        pooled: true
        # pool_size: 15
        jmxExport: true
        driverClassName: org.postgresql.Driver

    dataSource_two:
        pooled: true
        # pool_size: 15
        jmxExport: true
        driverClassName: org.postgresql.Driver

#############################################################
# Spring Actuator Endpoints are Disabled by Default
#############################################################
---
---
endpoints:
    enabled: false
    jmx:
        enabled: true

---
---
grails:
    codegen:
        defaultPackage: com.healthreveal
    controllers:
        defaultScope: singleton
    converters:
        encoding: UTF-8
    mime:
        disable:
            accept:
                header:
                    userAgents:
                        - Gecko
                        - WebKit
                        - Presto
                        - Trident
        types:
            all: '*/*'
            atom: application/atom+xml
            css: text/css
            csv: text/csv
            form: application/x-www-form-urlencoded
            html:
              - text/html
              - application/xhtml+xml
            js: text/javascript
            json:
              - application/json
              - text/json
            multipartForm: multipart/form-data
            rss: application/rss+xml
            text: text/plain
            hal:
              - application/hal+json
              - application/hal+xml
            xml:
              - text/xml
              - application/xml
    profile: rest-api (or web)
    spring:
        transactionManagement:
            proxies: false
        urlmapping:
            cache:
            maxsize: 1000

---
---
# you would think you could put this in the section above, but for some reason you can't
grails.logging.jul.usebridge: true

---
---
hibernate:
    cache:
        queries: false
        use_second_level_cache: true
        use_query_cache: false
        region.factory_class: org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory

---
---
info:
    app:
        name: '@info.app.name@'
        version: '@info.app.version@'
        grailsVersion: '@info.app.grailsVersion@'

---
---
spring:
    groovy:
        template:
            check-template-location: false

#################################################################
# This second section is a set of environment-specific over-rides
# to the common parameters.  There is no need to repeat a
# common parameter unless you want to change the setting (or add
# a new setting) within the context of an environment.
#################################################################

---
---
environments:
    development:
        dataSources:
            dataSource:
                dbCreate: update
                url: jdbc:postgresql://localhost:5432/dbOne
                username: someuser
                password: somepassword
            dataSource_xyz:
                dbCreate: update
                url: jdbc:postgresql://localhost:5432/dbXYZ
                username: someuser
                password: somepassword
        grails:
            serverURL: "http://localhost:8080"
            plugin:
                forceSSL:
                    enabled: false
       server:
            port: 8080
            ssl:
                enabled: false

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 2011-03-25
    • 2017-04-28
    • 2016-09-01
    • 2017-07-19
    • 2022-10-18
    • 2010-11-09
    • 2013-06-07
    • 1970-01-01
    相关资源
    最近更新 更多