【问题标题】:Why does grails use hsqldb when I ask for mysql?为什么grails在我要求mysql时使用hsqldb?
【发布时间】:2011-01-31 06:04:52
【问题描述】:

我正在关注Jason Rudolph's book at InfoQ 的赛道示例,使用 grails-1.2.1。我开始了从 hsqldb 切换到 mysql 的部分。我想我已经删除了 DataSource.groovy 文件中对 hsqldb 的所有引用,但是我得到一个异常并且堆栈跟踪显示它仍在使用 hsqldb。

DataSource.groovy

dataSource {
    boolean pooled = true
    String driverClassName = "com.mysql.jdbc.Driver"
    String url = "jdbc:mysql://localhost/dfpc2"
    String dbCreate = "create"
    String username = "dfpc2"
    String password = "dfpc2"
    dialect = org.hibernate.dialect.MySQL5InnoDBDialect 
}
hibernate {
    cache.use_second_level_cache=true
    cache.use_query_cache=true
    cache.provider_class='net.sf.ehcache.hibernate.EhCacheProvider'
}
// environment specific settings
environments {
    development {
    }
    test {
    }
    production {
    }
}

当我grails run-app 时,一切都开始时没有错误。我可以导航到主页。但是当我点击其中一个链接时,我会得到一个堆栈跟踪:

java.sql.SQLException: Table not found in statement [select this_.id as id0_0_, this_.version as version0_0_, this_.name as name0_0_, this_.variant as variant0_0_ from domainObject this_ limit ?]
at org.hsqldb.jdbc.Util.throwError(Unknown Source)
at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source)
at dfpc2.domainObjectController$_closure2.doCall(script1269434425504953491149.groovy:13)
at dfpc2.domainObjectController$_closure2.doCall(script1269434425504953491149.groovy)
at java.lang.Thread.run(Thread.java:619)

我的 mysql 数据库显示没有创建表。 (我认为 groovy 还没有连接到 mysql。)

我检查过的内容:

  1. mysql-connector-java-5.1.6.jar 在 lib 目录下。
  2. 我试过grails clean
  3. 我尝试将 dataSource 信息放在开发环境中(我还没有毕业测试或生产),但似乎没有任何区别。标准输出显示我正在使用开发环境。

我搜索过解决方案,但我发现的唯一解决方案是人们不更改测试或生产环境。

【问题讨论】:

    标签: grails datasource


    【解决方案1】:

    那本书已经过时了,InfoQ 应该删除它或添加一个指向最近出版的基于 Grails 1.2 的第二版的链接:http://www.infoq.com/minibooks/grails-getting-started

    【讨论】:

    • 感谢您的提示 - 第二版更易于使用。
    【解决方案2】:

    问题是类型声明。而不是

    dataSource {
        boolean pooled = true
        String driverClassName = "com.mysql.jdbc.Driver"
        String url = "jdbc:mysql://localhost/dfpc2"
        String dbCreate = "create"
        String username = "dfpc2"
        String password = "dfpc2"
        dialect = org.hibernate.dialect.MySQL5InnoDBDialect 
    }
    

    应该有:

    dataSource {
        pooled = true
        driverClassName = "com.mysql.jdbc.Driver"
        url = "jdbc:mysql://localhost/dfpc2"
        dbCreate = "create"
        username = "dfpc2"
        password = "dfpc2"
        dialect = org.hibernate.dialect.MySQL5InnoDBDialect 
    }
    

    在 grails doco 中找到了答案:

    在配置 DataSource 时,不要在任何配置设置之前包含 type 或 def 关键字,因为 Groovy 会将这些视为局部变量定义并且不会对其进行处理。例如以下是无效的:

    boolean pooled = true 
    

    【讨论】:

      猜你喜欢
      • 2012-03-04
      • 2011-07-12
      • 2011-04-10
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      相关资源
      最近更新 更多