怎么在Springboot 2中调用外部Tomcat源码?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
1。修改砰的一声。xml,改为打战争包
<代码> & lt; packaging> war 代码>
2。将Springboot内置tomcat作用域改为提供
& lt; dependency> & lt;才能groupId> org.springframework.boot</groupId> & lt;才能artifactId> spring-boot-starter-tomcat</artifactId> & lt;才能scope> provided</scope> & lt;/dependency>
3。重写SpringBootServletInitializer
@SpringBootApplication public class  Bootstrap extends SpringBootServletInitializer  { ,public static  void main (String [], args), { SpringApplication.run才能(Bootstrap.class, args); ,} ,@Override ,protected SpringApplicationBuilder 配置(SpringApplicationBuilder 构建器),{ return 才能builder.sources (Bootstrap.class); ,} }
4。maven打包出战争包后,放到tomcat的webapps目录下即可。
如果要访问该战争包的接口,默认需要在url加项目名作为前缀,例如:http://localhost: 8080/{项目名}/用户/123456
<强>原理分析强>
ServletContainerInitializer
Servlet容器启动时,会扫描当前应用每个jar包路径meta - inf \服务下的文件javax.servlet。ServletContainerInitializer,其文件内容就是ServletContainerInitializer的实现类全类名,并调用其>//,容器启动时,将,WebApplicationInitializer 的所有子类传递至,webAppInitializerClasses
@HandlesTypes (WebApplicationInitializer.class)
public class  SpringServletContainerInitializer implements ServletContainerInitializer  {
,/* *
,,*,@param webAppInitializerClasses @HandlesTypes 导入的类
,,*,@param servletContext 当前,web 应用,servlet 上下文
,,*/@Override才能
public 才能;void  onStartup (@Nullable Set< Class<?在祝辞,webAppInitializerClasses,, ServletContext servletContext), throws ServletException {
,,,List 容器启动时,执行<代码> SpringServletContainerInitializer.onStartup() 代码>方法,@HandlesTypes注解声明了<代码> WebApplicationInitializer> 代码的所有子类(在前面的示例中,启动类引导实现的<代码> SpringBootServletInitializer> 代码就是它的一个实现)会被传递给方法的参数webAppInitializerClasses。 onStartup()方法会过滤出webAppInitializerClasses中可用的<代码> WebApplicationInitializer 代码>子类引导,然后回调<代码> SpringBootServletInitializer的> public void onStartup (ServletContext servletContext), throws ServletException {
WebApplicationContext 才能;rootAppContext =, createRootApplicationContext (servletContext);
}
protected WebApplicationContext  createRootApplicationContext (ServletContext servletContext), {
SpringApplicationBuilder 才能;builder =, createSpringApplicationBuilder ();//才能,指定主类,引导
builder.main才能(getClass ());//,才能回调,Bootstrap 重写的方法
builder =,才能配置(施工);
return 才能;运行(builder.build ());
} 这个方法会配置当前网络应用程序上下文环境:指定主类,注册servletContext,调用配置(),运行运行。 由于引导重写了配置(),所以会执行重写的方法来指定主类,最后通过运行来完成启动Springboot应用。 关于怎么在Springboot 2中调用外部Tomcat源码问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。怎么在Springboot 2中调用外部Tomcat源码