在 micronaut 应用程序启动时运行代码

Mar*_*eal 5 micronaut

我试图找到执行一些启动代码的正确方法,这些启动代码在将 micronaut 作为 servlet 运行时读取并使用 tomcat 的 context.xml 。

我尝试创建一个@Singletonthat implements ApplicationEventListener<ServerStartupEvent>,但是当我的 micronaut 代码被编译并部署为 tomcat 中的 war 文件 servlet 时,它似乎没有被执行。

将 更改@Singleton@Context注释也没有帮助。

文档说这MicronautServletInitializer将注册一个新的bean DefaultMicronautServlet,但它看起来并不是DefaultMicronautServlet一个可以@Replace的bean,它只是将其硬编码在那里。

是否需要一些特殊的东西来触发应用程序事件?

编辑这也不起作用:

package com.mypackage.api;

import io.micronaut.context.event.ApplicationEventListener;
import io.micronaut.context.event.StartupEvent;
import jakarta.inject.Singleton;


@Singleton
//@Context // Doesn't execute with or without
public class SystemUtilsConfig implements ApplicationEventListener<StartupEvent>
{
    @Override
    //@EventListener // doesn't execute with or without
    //@Async // doesn't execute with or without
    public void onApplicationEvent(StartupEvent startupEvent)
    {
        System.out.println("=====SystemUtilsConfig.onApplicationEvent======");
    }
}
Run Code Online (Sandbox Code Playgroud)

Szy*_*iak 5

ServerStartupEvent与嵌入式服务器一起使用,而将 WAR 部署到现有 Tomcat 实例时则不是这种情况。如果您希望在这种情况下在启动时运行代码,请使用ApplicationEventListener<io.micronaut.context.event.StartupEvent>在应用程序引导完成后执行的代码,无论服务器是运行实例还是嵌入式实例。