Grails在部署期间如何处理数据库和数据源?
当我第一次将Grails部署到生产tomcat服务器时,它似乎正在尝试访问我的数据库。我知道这一点,因为我在stacktrace.log中收到以下错误消息Grails在部署期间如何处理数据库和数据源?,grails,Grails,当我第一次将Grails部署到生产tomcat服务器时,它似乎正在尝试访问我的数据库。我知道这一点,因为我在stacktrace.log中收到以下错误消息 invalid username/password; login denied 现在,我禁用了数据库创建 dataSource { pooled = false driverClassName = "oracle.jdbc.OracleDriver" dialect = org.hibernate.dialect.O
invalid username/password; login denied
现在,我禁用了数据库创建
dataSource {
pooled = false
driverClassName = "oracle.jdbc.OracleDriver"
dialect = org.hibernate.dialect.Oracle10gDialect
}
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = false
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
//Set jdbc metadata to false to not open a session
temp.use_jdbc_metadata_defaults = false
}
production {
dataSource {
dbCreate = "none"
url = "jdbc:oracle:thin:@1.1.1.1:1521:xe"
}
}
我不提供数据库密码,因为我们使用数据库用户进行身份验证和授权(请不要批评这个决定,我知道这很糟糕,但我们有一个遗留数据库)。因此,当用户通过客户端发出请求时,会提供用户名/密码。我们过去经常设置这个
Grails应用程序似乎因此无法启动。Grails为什么要访问数据库?它试图做什么?Grails在启动时使用连接来初始化GORM-有一个用于检测方言,一个用于配置LOB处理程序,Hibernate连接也用于初始化其配置
我在这两篇博文中讨论了这一点:dbCreate参数试图设置Grails如何处理对域类的更新/创建/删除模式更改。这就是它试图访问数据库的原因。将其设置为“无”会告诉Grails不要在应用程序启动期间尝试并管理它。太棒了!!实际上我已经这样做了,所以我不确定Grails为什么要在部署时访问数据库。是否在重新部署期间现有连接会导致某种数据库访问?我从不同的博客上得到了相同的建议。这是我问题中指向sergiosmind的博客链接。您是否配置了定期检查连接有效性的池?我没有使用连接池。是否仍有可能检查现有连接的有效性?我已将问题扩展为包含与生产相关的所有配置行,因此您可以看到池已禁用。为什么要禁用池?这太疯狂了。每次创建一个新连接的成本是相当可观的。您想要禁用池的唯一时间是在使用正在进行池的JNDI数据源时,因此创建本地池没有任何帮助。