gpt4 book ai didi

spring - @PostConstruct 在 Grails 服务上默默失败

转载 作者:行者123 更新时间:2023-12-02 00:44:45 27 4
gpt4 key购买 nike

我认为 Spring 注释应该在 Grails 环境中开箱即用,但我根本无法让它工作。我也尝试了afterProperties方法,也不起作用。

有人能发现错误吗?我需要做一些配置吗?

package dashboard

import javax.annotation.PostConstruct

class EmailJobSchedulerService
{
def grailsApplication

@PostConstruct
def init() {
def cronExpression = grailsApplication.config.emailAt8AmTrigger
println(cronExpression)
EmailSubscribersJob.schedule(cronExpression, new HashMap())
}
}

最佳答案

尝试将其更改为

@PostConstruct
void init() {

(即 void 而不是 def)。我不确定 Spring 是否专门强制执行此操作,但 specification of @PostConstruct其中指出“方法的返回类型必须为 void”。

编辑:uchamp 的评论是正确的,我刚刚尝试了相同的测试,实际上 @PostConstruct 注释的方法仅在第一次使用服务 bean 时调用,不一定在启动时立即调用。您可以添加

static lazyInit = false

到服务类以强制其在启动时立即初始化。这似乎没有记录在用户指南中,我通过 reading the code 推断出来。 .

请注意,上一段中的“使用”并不一定意味着您必须调用它的方法。服务 bean 将在第一次从应用程序上下文中获取时进行初始化,无论是直接获取还是因为它已 Autowiring 到正在初始化的另一个 bean 中。例如,使用将服务注入(inject)BootStrap

def emailJobSchedulerService

足以触发@PostConstruct方法,您不必从BootStrap.init闭包中实际调用任何服务的方法。同样,如果您的服务被注入(inject)到任何 Controller 中,那么 init 将在其中一个 Controller 第一次处理请求时触发(任何请求,它不一定是调用服务的操作)。

关于spring - @PostConstruct 在 Grails 服务上默默失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14832002/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com