0

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

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

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

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

4

1 回答 1

0

从事物的声音来看,它与您的注射有关。

  1. 我会跑

圣杯跑战

从开发 - 看看这是否会重新产生同样的问题:

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

如何在 Grails 中记录 SQL 语句

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

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

  1. 这肯定是一个服务,而不是一个 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'

这也可能有帮助

如何在 Grails Geb/Spock 测试用例中获取 sessionFactory?

于 2014-09-10T14:45:24.903 回答