我有一个使用 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/