【问题标题】:Deploy Spring-based web app in Undertow在 Undertow 中部署基于 Spring 的 Web 应用程序
【发布时间】:2015-03-07 22:34:06
【问题描述】:

我正在尝试将我们基于 Spring 的 Web 应用程序从 Tomcat 8 迁移到 Undertow。

我们使用 Spring 的 WebApplicationInitializer 进行 Spring-MVC 和 HibernateTransactionManager 的编程配置。

有一个ServletContainerInitializerInfo(Javadoc) 似乎符合我的目的,例如我可以实例化它,然后按照Undertow 文档(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();

问题是我不知道在调用ServletcontainerInitializerInfo 构造函数时用什么代替instanceFactoryhandlesTypes 参数。另外addServletContainerInitalizer方法的名称拼写错误(应该是Initializer而不是Initalizer)。

有人可以帮忙吗?

谢谢!

【问题讨论】:

    标签: spring spring-mvc undertow


    【解决方案1】:

    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<?>>());
    

    【讨论】:

    • 谢谢!我能够编译并启动应用程序。我遇到了另一个问题:Undertow 无法找到 Spring 的 WebApplicationInitializer 实例。我可能会为此发布一个单独的问题。
    • 搞定了。我必须在 HandlesTypes 列表中指定 WebApplicationInitializer 的具体实现。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 2018-05-13
    • 2012-09-17
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    相关资源
    最近更新 更多