Grails在部署期间如何处理数据库和数据源?

Grails在部署期间如何处理数据库和数据源?,grails,Grails,当我第一次将Grails部署到生产tomcat服务器时,它似乎正在尝试访问我的数据库。我知道这一点,因为我在stacktrace.log中收到以下错误消息 invalid username/password; login denied 现在,我禁用了数据库创建 dataSource { pooled = false driverClassName = "oracle.jdbc.OracleDriver" dialect = org.hibernate.dialect.O

当我第一次将Grails部署到生产tomcat服务器时,它似乎正在尝试访问我的数据库。我知道这一点,因为我在stacktrace.log中收到以下错误消息

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数据源时,因此创建本地池没有任何帮助。