将Jetty迁移到SpringBoot Jetty上。

问题描述 投票:0回答:1

我有一个使用spring 4.x的应用程序,决定用spring boot 2.3.0将其迁移到spring 5.x。

该应用运行在 jetty 服务器之上,该服务器有一些特殊的配置和大量的连接器。我设法从spring中获得了嵌入式jetty服务器,并添加了连接器,但我在设置一些特定的值时遇到了困难。

我还把部分xml配置移到了注释类中--所以让我解释一下这个问题。

如果我理解正确,我的配置类应该实现这些接口。

@Configuration
public class Server implements WebServerFactoryCustomizer<JettyServletWebServerFactory>,
                               ServletContextInitializer

我实现了 void customize(JettyServletWebServerFactory factory) 方法从 WebServerFactoryCustomizer 在这里我添加了连接器并设置了一些值。

这看起来像这样。

void customize(JettyServletWebServerFactory factory) {
   factory.addServerCustomizers(jettyServer -> {
       jettyServer.addConnector(new ServerConnector(server, sslContextFactory));
       ...

       // ---the part of the old code---
                final ServletHolder servletHolder = new ServletHolder(new CXFServlet());
        final ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);

        context .setContextPath("/");
        context .addServlet(servletHolder, "/*");
        context .addFilter(MyCustomFilter.class, "/*", EnumSet.allOf(DispatcherType.class));
        context .addEventListener( new ContextLoaderListener() );

        // the problematic line
        restContext.setInitParameter("contextConfigLocation", "classpath:application-context.xml");

       // ---
   }
}

问题是我把所有的配置都从XML移到了注解类里 我不知道有什么办法能把initParameter指向我的注解类 它包含了所有的注解,例如 SpringBootApplication, ComponentScan等...

所以我在想,我将把这个(和其他的一堆东西)移到实现和覆盖的方法中,从 ServletContextInitializer void onStartup(ServletContext servletContext)javax.servlet.ServletContext 论点与 org.eclipse.jetty.servlet.ServletContextHandler 它为我提供了更多的选项,比如设置SessionHandler、ResourceHandler、ContextHandler......。(我可以设置一些ServletContext的值,但不是全部...)

任何能给我指明正确方向的帮助都将感激不尽...。

java spring spring-boot jetty embedded-jetty
1个回答
0
投票

我想明白了......对于基于XML的配置,你只需要设置这个。

restContext.setInitParameter("contextConfigLocation", "classpath:application-context.xml");

对于基于类的配置,你必须设置这两个。

    restContext.setInitParameter("contextClass", AnnotationConfigWebApplicationContext.class.getName());
    restContext.setInitParameter("contextConfigLocation", Main.class.getName());
© www.soinside.com 2019 - 2024. All rights reserved.