我试图找到执行一些启动代码的正确方法,这些启动代码在将 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)
它ServerStartupEvent与嵌入式服务器一起使用,而将 WAR 部署到现有 Tomcat 实例时则不是这种情况。如果您希望在这种情况下在启动时运行代码,请使用ApplicationEventListener<io.micronaut.context.event.StartupEvent>在应用程序引导完成后执行的代码,无论服务器是运行实例还是嵌入式实例。
| 归档时间: |
|
| 查看次数: |
1240 次 |
| 最近记录: |