spring boot tomcat 部署

Posted 经济人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot tomcat 部署相关的知识,希望对你有一定的参考价值。

    前几天springboot项目部署到linux中,整个过程就是个坑啊。踩坑的过程中也学到了许多。spring boot 项目部署时由于其内置了tomcat和jdk,而且还都是8。 所以部署的话就分为两种部署了, 第一种就是使用其内置的tomcat部署, 第二种就是采用外部的tomcat部署。采用内部的tomcat部署又分为两种: 第一种是打包成war包部署,第二种事打包成jar包部署。 两者区别就在于打包成jar包的是无静态资源的,如jsp,html等,像只是提供restful接口。

    阅读此篇博客请先去阅读本人的spring boot 常用注解

    除了必要的jar,插件外还需导入 spring-boot-maven-plugin 插件

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.5.6.RELEASE</version>
                <configuration>
                    <!-- 指定该Main Class为全局的唯一入口 -->
                    <mainClass>com.spSystem.App</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                <!--可以把依赖的包都打包到生成的Jar包中-->
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
 </build>    

    采用外置tomcat部署时要注意:

    1. 依赖jar包的冲突

    由于spring boot 内置了tomcat,jdk,servlet等,所以部署到外部tomcat中时要将其内置的tomcat,servlet等设置为只在编译和测试时使用

            <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
                        <!-- 去除Spring Boot自带的Tomcat插件 -->
			<scope>provided</scope>
            </dependency>

          <!-- 配置低版本Tomcat,否则需8.5以上版本,请根据自己的Tomcat版本配置 -->
            <properties> 
              <tomcat.version>7.0.77</tomcat.version>
            </properties>

    2. 程序主入口是什么

    项目中内置了servlet,程序的主入口原先是main方法,使用main方法自启动。 所以我们要将其重写

@SpringBootApplication
public class SpringBootTest extends SpringBootServletInitializer {
 
	public static void main(String[] args) {
		SpringApplication.run(SpringBootTest.class, args);
	}
	
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(SpringBootTest.class);
    }

}

    3.导入相应jar包的maven依赖时其相对应的版本

    由于spring boot与jdk,spring cloud 都有相对应的版本,所以导入jar包maven依赖时要配对好。 spring boot 2.0及以上的对应jdk1.8, spring cloud Finchley 版。 jdk 1.7 对应的是 spring boot 1.5 (1.0版)

    

    4. 部署到tomcat后程序的访问路径

    本地中启动项目访问是没有项目名的,但部署上去后。访问路径要加上项目名了(如:http://IP:端口/项目名/路由)

    采用内置tomcat 部署 :

    导出jar 包(同maven 导 jar 包,导war 包相同)采用内置tomcat 部署 将jar 包放入linux 中的一个目录, 然后进入其所在目录,执行

# spSystem.jar: jar包
# springboot.log: 执行命令后所生成的项目运行log(命令执行完,查看此log看看项目是否启动成功)
# &1 &:将此项目设置为守护进程,要不然黑窗口一关项目也就停止了
nohup java -jar spSystem.jar >springboot.log 2>&1 &

    采用内置tomcat部署时要注意:同上 1, 3

    当采用内置tomcat 部署时 没有导入 spring-boot-maven-plugin 插件 maven依赖 或者 没有在依赖中指定程序的主入口 都会报 no  main  in xx.jar

    当注意1的时候, 就是与采用外部tomcat 部署相反了,把<scope>provided</scope>注释掉,或者把tomcat等的maven 依赖注释去除

    当注意3 的时候, 就会报XXXXX 52 版本冲突

    关闭程序,杀死进程就可以了

以上是关于spring boot tomcat 部署的主要内容,如果未能解决你的问题,请参考以下文章

Spring-Boot项目部署到单独tomcat运行

spring boot怎么部署到服务器

spring boot tomcat 部署

列出所有已部署的 REST 端点(spring-boot、tomcat)

使用 Tomcat 进行 Spring Boot 部署

部署spring boot到tomcat服务器上