在開發階段我們推薦使用內嵌的tomcat進行開發,因為這樣會方便很多,但是到生成環境中,需要將項目部署到外部Tomcat中運行,此時需要一些額外的配置:
1.pom.xml調整
1.1 打包方式修改
<packaging>jar</packaging>
變更為
<packaging>war</packaging>
1.2 將spring-boot-starter-tomcat的范圍設置為provided
scope設置為provided,將springboot的內置Tomcat在打包時排除
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
發現原來項目中沒有配置上面配置,因為spring-boot-starter-web內傳遞依賴了tomcat,我們需要手動配以覆蓋傳遞依賴的配置
2. 啟動類修改
繼承SpringBootServletInitializer覆蓋configure方法,示例:
public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } public static void main(String[] args) { new SpringApplicationBuilder(Application.class).web(true).run(args); } }
3.項目訪問路徑修改
SpringBoot開發中使用內置Tomcat運行時,常常不使用項目名直接訪問,如果部署到外部Tomcat就會出現問題,此時可以做以下配置:
修改server.xml文件
在Tomcat安裝路徑下conf文件夾中server.xml文件中找到<Host></Host>標簽,在其內部添加
<Host> <Context docBase="D:\Tomcat\apache-tomcat-9.0.24\webapps\erp" path="" reloadable="true" crossContext="true"/> //其中docBase是項目war包在webapps的地址 </Host>
• 另外,需要注意的幾點:
1.要保證啟動tomcat之前開啟mysql
2.Linux對於數據庫的庫名表名嚴格區分大小寫,需要對其進行表名全部小寫的限制
在/etc/my.cnf中添加
[mysqld] lower_case_table_names=1