spring boot tomcat 部署

摘要:
几天前,spring boot项目被部署到了Linux上,整个过程都是一个坑。Spring boot项目是因为其内置tomcat和jdk而部署的,两者都是8。因此,部署可以分为两种类型:第一种是使用其内置的tomcat部署,第二种是使用外部tomcat部署。Spring root 2.0及以上版本对应于jdk1.8,Spring cloud Finchley版本。Jdk1.7对应于springboot1.5 4。在部署到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版)

    spring boot tomcat 部署第1张

    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 部署》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Eclipse输入命令行参数docker搭建svn并对svn客户端进行相关操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Spring Boot常见问题(二)Unable to start embedded container; nested exception is java.lang.NoSuchMethodError: org.apache.tomcat.util.scan.StandardJarScanner.setJarScanFilter(Lorg/apache/tomcat/JarScanFilter;

问题描述:通过Spring Boot官方提供的方式,写出如下HelloWorld代码。 @Controller @EnableAutoConfiguration public class HelloWorld { @RequestMapping("/wu") @ResponseBody String home() {...

使用U盘安装mint

系统坏了,重新装的时候,硬盘甚至都没法格式化。。。所以,狠狠心买了块固态硬盘,123G,威刚。 想自己装Linux系统,这样用起来更方便一点,不用装虚拟机,然后再跑linux什么的。最后选了mint。 好嘛,问题来了,怎么装上去? 其实,找张空盘,把系统刻上去,这可能是最省力的方法了。但是,问题是另一台笔记本没有光驱。so。。。只能考虑u盘。 最初,是想尝...

Spring Boot 2.2.x Junit4 升级为Junit5 后的变化、对比 找不到 org.junit.jupiter.api.Test

遇到的问题:使用 maven 创建了一个 parent 项目 A,其 pom.xml 继承 parent 为 spring-boot-starter-parent 2.1.10。 然后创建 module 项目 B,使用 spring initializr 构建项目,用的是 IDEA,当时没有选 Spring Boot 版本,结果默认使用的是 2.2.1。...

SpringMVC 钉钉 消息推送

Spring Boot Admin 集成自定义监控告警(2.0.1版本)------钉钉机器人_yuancao24的博客-CSDN博客_bootadmin 2.0 监控信息https://blog.csdn.net/yuancao24/article/details/83576194 OA集成钉钉开发——第四篇——微应用开发_weixin_34249678...

一次linux启动故障记录

故障背景: 在2.6.32升级内核之后,出现多台设备启动失败,失败的全部都是ssd作为系统盘的机器,bios引导之后,屏幕就黑了,没有打印。 一开是以为是mbr损坏了,所以将启动盘挂载到其他服务器上,结果发现mbr和升级之前备份的mbr是一样的,而且和升级后能正常启动的mbr也是一样的。 排查到此,没能继续跟踪,找专业的os团队同事蒙恩排查,结论记录如下:...

Android : 修改内核源码 and 编译、打包成新的boot.img

一、Android内核源码的下载: 1.Google GIT地址: $ git clone https://android.googlesource.com/kernel/common.git   $ git clone https://android.googlesource.com/kernel/exynos.git   $ git clone htt...