我正在尝试将基于Spring的Web应用程序从Tomcat 8迁移到Undertow。
我们使用Spring的WebApplicationInitializer进行Spring-MVC和HibernateTransactionManager的编程配置。
有一个ServletContainerInitializerInfo
类(Javadoc)似乎符合我的目的,例如我可以实例化它,然后按照Undertow docs (link)中给出的步骤启动服务器:
ServletContainerInitializerInfo sciInfo =
new ServletContainerInitializerInfo(containerInitializerClass,
instanceFactory, handlesTypes);
DeploymentInfo servletBuilder = Servlets.deployment()
.addServletContainerInitalizer(sciInfo);
DeploymentManager manager = Servlets.defaultContainer()
.addDeployment(servletBuilder);
manager.deploy();
PathHandler path = Handlers.path(Handlers.redirect("/myapp"))
.addPrefixPath("/myapp", manager.start());
Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(path)
.build();
server.start();
问题在于我不知道在调用instanceFactory
构造函数时用handlesTypes
和ServletcontainerInitializerInfo
参数替换什么。此外,addServletContainerInitalizer
方法的名称拼写错误(应该是Initializer而不是Initalizer)。
有人可以帮忙吗?
谢谢!
答案 0 :(得分:3)
Undertow在实例化后使用InstanceFactory<T>
作为依赖注入的扩展点或给定类的实例的其他自定义。
handlesTypes
参数将是与servlet容器初始化程序中的@HandlesTypes
注释相对应的所有类的集合。
如果您的初始化程序没有@HandlesTypes
并且不需要依赖注入,那么您可以尝试这样做:
MyInitializer initializer = new MyInitializer();
InstanceFactory<MyInitializer> instanceFactory
= new ImmediateInstanceFactory<>(initializer);
ServletContainerInitializerInfo sciInfo =
new ServletContainerInitializerInfo(MyInitializer.class,
instanceFactory, new HashSet<Class<?>>());