生产环境中的 Grails 服务返回 Null

Posted

技术标签:

【中文标题】生产环境中的 Grails 服务返回 Null【英文标题】:Grails Service in Production Environment returns Null 【发布时间】:2014-11-02 21:50:45 【问题描述】:

我正在使用 Grails 2.4.3,并且我有一个仅在生产环境中返回 null 的服务。如果我在开发环境中运行它,服务会正确响应。即使我使用 Development 生成一个 war 文件,它也可以工作,但是如果我使用生产环境(默认的 grails war)生成一个 war 文件,该服务将返回 null。我不确定在环境影响服务的情况下可能导致这种情况发生的原因......?

我只发现一个特定服务以这种方式响应的问题。项目中的所有其他服务似乎在所有环境中都能正常工作。

--更新-- 详细说明有问题的服务:该服务确实进行了一些数据库查询并保存(在会话中获取一些信息并保存)。它在类上用@Transactional 标记。它还按照约定注入了两个辅助服务(包括 sessionFactory)(def sessionFactory; def otherService;)

我也尝试从应用程序上下文中获取 bean,但得到“找不到 Bean”

【问题讨论】:

服务在做什么?服务是否从数据库中检索数据? 这肯定与天气状况有关 :)。详细说明! 【参考方案1】:

从事情的声音来看,它与您的注射有关..

    我会跑

grails 运行战

来自开发 - 看看这是否会重新产生相同的问题:

    将应用程序数据库置于调试模式,查看是否与数据库相关:

How to log SQL statements in Grails

如果这不能解决问题,下一个尝试是将实际应用程序置于调试模式

http://grails-dev.blogspot.co.uk/2012/09/setting-up-log4j-configuration-in.html

    这当然是一个服务,而不是一个 groovy src 文件或其他东西,为了将服务注入到其他调用中,您可以尝试:

conf/spring/resources.groovy

为 src/groovy 文件创建一个条目:在本例中为 GetDownloadConfig 定义注入:

getDownloadConfig(GetDownloadConfig) 
                grailsApplication = ref('grailsApplication')
                dnsService = ref('dnsService')
                jobReplaceService= ref('jobReplaceService')
                jenkinsService= ref('jenkinsService')
            

然后在

class GetDownloadConfig 
    def jenkinsService
    def dnsService
    def jobReplaceService
    def grailsApplication


     // Or alternative method using holders - 
    //def grailsApplication = Holders.grailsApplication.mainContext.getBean 'grailsApplication'
    //def dnsService = Holders.grailsApplication.mainContext.getBean 'dnsService'
    //def jobReplaceService= Holders.grailsApplication.mainContext.getBean 'jobReplaceService'
    //def jenkinsService= Holders.grailsApplication.mainContext.getBean 'jenkinsService'

这可能也有帮助

How do you get the sessionFactory in a Grails Geb/Spock test case?

【讨论】:

以上是关于生产环境中的 Grails 服务返回 Null的主要内容,如果未能解决你的问题,请参考以下文章

如何在实时/生产环境中监控和维护我的 Grails 应用程序?

仅在生产环境中编码的 Grails GSP 表达式

grails 2.0 - 正确使用 serverURL 进行生产?

aws 如何从生产环境中的 lambda 函数访问 ECS 服务

“Where query”在生产环境中创建错误的 SQL

如何访问 Grails 中的两个数据库