类[]的方法在Grails应用程序之外使用

时间:2014-08-28 15:18:46

标签: grails groovy static-members

此错误的先前问题是指hibernate版本问题或运行测试。我认为这不是这种情况。

在Grails服务课程中,我有:

private static User anon = User.findByUsername('anonymous')

这就是创建错误:

Caused by IllegalStateException: Method on class [User] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.

我正在尝试使用存储在数据库中的对象来实例化私有静态属性,但我必须做一些非常错误的事情。感谢您提供任何帮助,建议和指示。

2 个答案:

答案 0 :(得分:8)

这个static无法工作,因为这会在加载服务时尝试进行findByUsername调用,在GrailsApplication初始化过程完成之前。最早可以可靠地调用GORM方法的时间是BootStrap,所以我倾向于在这些情况下做的是在服务上创建一个初始化方法,然后从BootStrap init闭包中调用该方法

答案 1 :(得分:2)

我知道这是旧的,但是,你使用的是哪个版本的grails?从grails 2.3迁移到grails 2.5后,我遇到了同样的问题。

经过一些非常痛苦的调查后,我发现问题是在使用新的fork模式属性运行测试时,并且通过从BuildConfig.groovy中删除这些选项很容易解决:

 grails.project.fork = [
        // configure settings for compilation JVM, note that if you alter the Groovy version forked compilation is required
        //compile: [maxMemory: 256, minMemory: 64, debug: false, maxPerm: 256, daemon:true],

        // configure settings for the test-app JVM, uses the daemon by default
        test: false,
        // configure settings for the run-app JVM
        run: [maxMemory: 1536, minMemory: 512, debug: false, maxPerm: 1024, forkReserve:false],
        // configure settings for the run-war JVM
        war: [maxMemory: 1536, minMemory: 512, debug: false, maxPerm: 1024, forkReserve:false],
        // configure settings for the Console UI JVM
        console: [maxMemory: 1536, minMemory: 64, debug: false, maxPerm: 1024]
]

问候。