idea下springboot打包成jar包和war包,并且在外部tomcat下运行访问
如果要在外部tomcat运行,还需要更改一些配置之后再进行打包
下面以war包为例
Exclusions:当一个项目A依赖项目B,而项目B同时依赖项目C,如果项目A中因为各种原因不想引用项目C,在配置项目B的依赖时,可以排除对C的依赖。
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
maven中三种classpath
编译,测试,运行
1.compile:默认范围,编译测试运行都有效
2.provided:在编译和测试时有效
3.runtime:在测试和运行时有效
4.test:只在测试时有效
5.system:在编译和测试时有效,与本机系统关联,可移植性差
org.springframework.boot
spring-boot-starter-tomcat
provided
修改启动类,重写初始化方法
为什么要重写初始化方法,如果您正在构建WAR文件并部署它,则需要WebApplicationInitializer
启动类代码:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
修改方式
//方式一,启动类继承SpringBootServletInitializer实现configure:
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
}
//方式二,新增加一个类继承SpringBootServletInitializer实现configure:
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
//此处的Application.class为带有@SpringBootApplication注解的启动类
return builder.sources(Application.class);
}
}
接着像上面一样打包,然后直接复制打包好的war包到外部tomcat的webapps目录中
在浏览器中访问路径需要加上你的项目名字,才能成功访问。也就是这个文件夹的名字
使用外部Tomcat部署访问的时候,application.properties(或者application.yml)中配置的
server.port=
server.servlet.context-path=
将失效,请使用tomcat的端口,tomcat,webapps下项目名进行访问
同时确保pom中有以下代码
org.apache.maven.plugins maven-war-plugin 3.0.0 false ${artifactId}部署tomcat后部分资源不存在
部署到tomcat上后,由于我们的访问路径可能发生变化,例如IDEA是用localhost:8080访问的首页,但是部署后可能首页是localhost:8080/Mynote。
同理,可能出现资源显示不出来,例如我的图片在数据库中的存储路径如下: