我在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连接字符串?!
答案 0 :(得分: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表。指定方言可确保您的应用使用正确的表类型。
答案 1 :(得分:0)
我发现了问题的原因。 数据源的代码块在源中具有小写“s”。它应该是dataSource,而不是 datasource 。
当缺少此块时,默认情况下显示的是名为“grailsDB”的h2数据库。我无法在任何地方找到这个记录,因此我的困惑。
检查您的案例!!!!