1

我正在 Heroku 服务器上设置 Grails 2.3.5 应用程序,并且在 tomcat 启动时不断收到以下错误:

    Caused by: java.sql.SQLException: Driver:com.mysql.jdbc.Driver@5a7359fe returned null for URL:jdbc:h2:mem:grailsDB;MVCC=TRUE;LOCK_TIMEOUT=10000 

我没有使用 h2 作为数据库。我想使用 ClearDB。我的环境变量看起来都正确,DataSource.groovy 中的一切看起来都正确。我什至将连接字符串设置为硬编码,看看这是否会有所作为。纳达。

    production {
        datasource {
            dbCreate = "create-drop"
            url = "jdbc:mysql://us-cdbr-east-05.cleardb.net/heroku_5a952ab6aXXXXXXX?reconnect=true"

            username = "XXXXX"
            password = "xxxxx"
        }
    }

显然我错过了一些东西,但我看不到什么。生产设置从哪里获取 h2 连接字符串?!

4

2 回答 2

3

您没有显示完整DataSource.groovy文件,但它可能在顶部 ( driverClassName = "org.h2.Driver") 中有 H2 驱动程序。那里的值是默认值,特定于环境的块被合并到其中以创建最终设置。您可以在production块中覆盖它

production {
   datasource {
      dbCreate = "create-drop"
      url = "jdbc:mysql://us-cdbr-east-05.cleardb.net/heroku_5a952ab6aXXXXXXX?reconnect=true"

      username = "XXXXX"
      password = "xxxxx"

      driverClassName = 'com.mysql.jdbc.Driver'
      dialect = org.hibernate.dialect.MySQL5InnoDBDialect
   }
}

此外,在使用 MySQL 时,您应该始终指定方言。在大多数情况下,Grails 可以很好地自动检测方言,但无法确定您使用的是 MyISAM 还是 InnoDB,因此它默认为使用为整个服务器配置的默认引擎类型的方言。MySQL 的较新版本默认为 InnoDB,并且在任何版本中都可以轻松更改它,但如果您不这样做或者它是旧版本,您最终会得到非事务性 MyISAM 表。指定方言可确保您的应用程序使用正确的表类型。

于 2014-02-28T22:47:01.030 回答
1

我找到了我的问题的原因。数据源的代码块在源中有一个小写的“s”。它应该是 dataSource ,而不是datasource

如果缺少此块,则默认显示为名为“grailsDB”的 h2 数据库。我在任何地方都找不到这个文档,因此我很困惑。

检查你的情况!!!!

于 2014-03-02T14:37:23.537 回答