用好springboot系列--web目录外部化

     基于springboot的web工程在打包时,一般情况下分为两种方式。一种为jar方式,这种方式包含一个嵌入式的web容器,例如tomcat或jetty。另一种方式则为war包方式。在工程实践中,我常常使用第一种jar方式,这种方式优点为部署简单。在toB业务中,实施人员不需要掌握tomcat等web容器的安装方式,减少了出错的可能性。但使用此种方式,也同时带来一个问题,springboot工程打包部署时,将web静态页及相关文件,也打入jar中,不利于现场的js页的调试和编码。

      是否有办法可以将web静态资源外部化?答案是存在的。通过阅读springboot的源码,我发现在嵌入式tomcat的启动中,会经历以下步骤。      

EmbeddedWebApplicationContext.createEmbeddedServletContainer()

TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer()

TomcatEmbeddedServletContainerFactory.prepareContext()

AbstractEmbeddedServletContainerFactory.getValidDocumentRoot()

AbstractEmbeddedServletContainerFactory.getCommonDocumentRoot()

最终在获取documentRoot的过程中,我们可以看到类成员,有如下定义。

private static final String[] COMMON_DOC_ROOTS = { "src/main/webapp", "public",  "static" };

所以只要在${user.dir}目录下建立public或static目录,springboot的jar运行时可以加载这些目录下的web静态资源。

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页