grails - 如何从Grails中正确去除H2

标签 grails configuration h2

我正在尝试最小化我的Grails(2.4.2)应用程序,并剔除create-app生成的许多我不想使用的东西。

H2是其中之一。我只是不打算使用它,而且,如果我需要嵌入式DB,我更喜欢使用HSQLDB。

因此,我对BuildConfig进行了以下更改:

...

// Remove the DB console for all environments, not just dev.
grails.dbconsole.enabled = false

...

grails.project.dependency.resolution = {
    inherits("global") {
        excludes 'h2'
    }

    ...
}

现在,当我执行run-app时,出现以下错误:
... <huge stacktrace omitted for brevity>
Caused by: org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is java.sql.SQLException: org.h2.Driver
    ... 4 more
Caused by: java.sql.SQLException: org.h2.Driver
    ... 4 more
Caused by: java.lang.ClassNotFoundException: org.h2.Driver
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.Class.forName(Class.java:270)
    ... 4 more
Error |
Forked Grails VM exited with error

这是怎么回事,如何在正确删除H2及其任何配置/引用的同时修复此错误?

更新,我的DataSources.groovy文件
dataSource {
    pooled = true
    jmxExport = true
    driverClassName = "org.h2.Driver"
    username = "sa"
    password = ""
}
hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = false
    //    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' // Hibernate 3
    cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' // Hibernate 4
    singleSession = true // configure OSIV singleSession mode
}

// environment specific settings
environments {
    development {
        dataSource {
            dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
            url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
        }
    }
    test {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
        }
    }
    production {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
            properties {
                // See http://grails.org/doc/latest/guide/conf.html#dataSource for documentation
                jmxEnabled = true
                initialSize = 5
                maxActive = 50
                minIdle = 5
                maxIdle = 25
                maxWait = 10000
                maxAge = 10 * 60000
                timeBetweenEvictionRunsMillis = 5000
                minEvictableIdleTimeMillis = 60000
                validationQuery = "SELECT 1"
                validationQueryTimeout = 3
                validationInterval = 15000
                testOnBorrow = true
                testWhileIdle = true
                testOnReturn = false
                jdbcInterceptors = "ConnectionState"
                defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED
            }
        }
    }
}

最佳答案

grails-app/conf/DataSources.groovy中,您可能对h2驱动程序有一些引用,例如

dataSource {
    pooled = true
    jmxExport = true
    driverClassName = "org.h2.Driver"
    username = "sa"
    password = ""
}

如果您不使用任何数据库,请完全删除dataSource配置。如果您使用的是其他数据库,则将h2驱动程序类名称替换为数据库驱动程序的类名称。

关于grails - 如何从Grails中正确去除H2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27043563/

相关文章:

grails - 如何检查元素在视口(viewport)中是否可见?

jquery - 对Grails Controller的JQuery Ajax请求不起作用

hibernate - 如何使用 Guice 将属性注入(inject)/解析到 XML 文件中以配置 persistence.xml 文件?

vim - 在当前垂直拆分中打开 quickfix

java - 类 : model. 类别中的 IllegalArgumentException,属性的 getter 方法:id

grails - 无法在 Grails 3.1.1 中安装 HTML5 拖放多文件上传插件

grails - Quartz cronExpression来自Grails中的数据库

azure - 在 Azure 中管理环境特定应用程序设置的最佳方法是什么?

grails - 用grails控制台创建的新域对象在dbconsole中不可见

sql - H2 数据库 - 使用 SQL 对列重新排序