SpringBoot开发和部署路径冲突的妥协

微信图片_20181129204029.jpg

一、使用SpringBoot2.x版本,在开发的时候不作多余配置,启动后直接ip:port/就是根路径了。但在tomcat中部署的时候若是存在多个项目,每一个项目都用本身的名称,那么实际访问路径就是ip:port/项目名称/了。css

二、若是没有其余引用,controller里的requestMapping也不须要添加任何项目前缀,开发和部署都能正常运行,完美。但是若是在html页面引用了静态文件,这个静态文件的路径应该怎么写呢?若是写成/css/index.css在本地测试能够但部署就不行。若是写成/项目名称/css/index.css效果正好相反。若是把路径最前面的/去掉那就更不可行了,由于一般这些引用是写在一个通用模块供全部页面导入的,去掉以后实际路径是随页面路径不一样而不一样的。html

三、这只是静态文件引用路径问题,若是页面中有请求接口的代码的话,那么接口地址到底加不加项目名称前缀也很难兼顾开发和部署。web

四、因此妥协的作法就是以部署环境为准,来作最少的配置变动,在开发和部署时只要变动这些配置便可。那么最少的配置变动究竟是有多少呢?tomcat

五、第一,部署环境有项目名称,因此咱们的静态文件路径和接口路径都添加/项目名称这样的前缀。第二,在配置文件中设置server.servlet.context-path=/项目名称。第三,在static目录下新建一个项目名称的目录,把本来在static下的全部静态文件拷贝一份到这个目录中,至关于两份静态文件一份给本地测试用,一份给部署时用。至此咱们本地测试运行的话,就和部署时一致了。微信

六、那么部署时呢?部署时貌似能够不作任何变更。若是你勤快的话,上面第三步多出来的一份静态文件能够删除,若是还在测试中的话建议保留,这样开发和部署效率就会高一些。app

1668061fb661dcc5.jpg