java - 将 Jetty 迁移到 SpringBoot Jetty

标签 java spring spring-boot jetty embedded-jetty

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

该应用程序运行在jetty服务器之上,该服务器具有一些特殊的配置和相当多的连接器。我设法从 spring 获得嵌入式 jetty 服务器并添加连接器,但我在设置一些特定值方面遇到了困难。

我还将部分 xml 配置移至带注释的类 - 所以让我解释一下问题。

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

@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,但不是全部...)

任何帮助我指明正确方向的帮助都会受到赞赏......

最佳答案

我终于明白了... 对于基于 XML 的配置,您只需这样设置:

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

对于基于类的您必须设置这两项:

    restContext.setInitParameter("contextClass", AnnotationConfigWebApplicationContext.class.getName());
    restContext.setInitParameter("contextConfigLocation", Main.class.getName());

关于java - 将 Jetty 迁移到 SpringBoot Jetty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62216282/

相关文章:

java - spring boot中如何读写文件

java - 信用卡验证 - 技术上正确但算法错误?

java - 在 Camel JUnit 中 Autowiring Spring Bean

java - Spring security REST api 自定义HTTP基本身份验证

java - 在 post api 的请求正文中接受数组时处理失败的更好方法?

java - 生成动态密码重置链接

spring - 如果我们想控制后端的访问,为什么我们需要 Keycloak 权限/策略/范围?

java - 如何调用JSP页面查询?

java - 如何删除饼图中部分标签周围的部分标签框

java - 无法迭代查询返回的值