linux Springboot项目部署(jar包或者war包)

Jar包部署

主要通过使用nohup命令来实现:

示例:

nohup java -jar xxx.jar &

这样执行后,nohup会把执行结果中的日志输出到当前文件夹下面的nohup.out文件中,通常情况下我们使用以上命令即可。 
我们也可以手动指定一个参数来规定日志文件的输出地点,如:

nohup java -jar xxx.jar > catalina.out  2>&1 &

如果不需要输出日志,可以使用如下命令

nohup java -jar xxx.jar >/dev/null &

所以,我们只需要使用nohup java -jar yourapp.jar &命令,就能让yourapp.jar在后台运行了。

方便管理,我们还可以通过Shell来编写一些用于启动应用的脚本,比如下面几个:

关闭应用的脚本:stop.sh

#!/bin/bash
PID=$(ps -ef | grep yourapp.jar | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
    echo Application is already stopped
else
    echo kill $PID
    kill $PID
fi

启动应用的脚本:start.sh

#!/bin/bash
nohup java -jar yourapp.jar --server.port=8888 &

整合了关闭和启动的脚本:run.sh,由于会先执行关闭应用,然后再启动应用,这样不会引起端口冲突等问题,适合在持续集成系统中进行反复调用。

#!/bin/bash
echo stop application
source stop.sh
echo start application
source start.sh

War包部署

修改启动入口

package com.hongguaninfo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;

/**
 * Created by chenqinglong on 2019/2/1 0001.
 */
@SpringBootApplication
@ComponentScan(basePackages = { "com.hongguaninfo" })
@MapperScan("com.hongguaninfo.quartz.mapper")
public class QuartzApplication extends SpringBootServletInitializer {
    public static void main(String[] args){
        SpringApplication.run(QuartzApplication.class, args);
    }

    /**
     * 继承SpringBootServletInitializer 实现configure 方便打war 外部服务器部署。
     * 需要把web项目打成war包部署到外部tomcat运行时需要改变启动方式
     * @param application
     * @return
     */
    @Override
    protected final SpringApplicationBuilder configure(final SpringApplicationBuilder application) {
        return application.sources(QuartzApplication.class);
    }
}

springboot项目打成war包部署到tomcat时需要改变启动方式,否则运行tomcatwar包只会解压,但是加载不了。

需要继承 org.springframework.boot.context.web.SpringBootServletInitializer,覆盖其config(SpringApplicationBuilder)方法

修改pom文件

  1. 指定打war包的时不再需要tomcat相关的包,所以需要将springboot内置tomcat排除掉再打包:

    org.springframework.boot
    spring-boot-starter-web
    
        
            org.springframework.boot
            spring-boot-starter-tomcat
        
    

(注意:本地main方法运行时,需要将排除部分注释掉)

2、springboot项目使用jsp页面时会添加以下依赖,但是在外部tomcat运行时会报错

因为tomcat /lib下自带的jar包(jasper.jar,jsp-api.jar等)会跟war包项目路径/lib下的解析jsp的jar包冲突

删除项目路径/lib下的相关jar包即可,如下:


    org.apache.tomcat.embed
    tomcat-embed-jasper
    provided


    javax.servlet
    javax.servlet-api
    provided

(注意:本地main方法运行时,需要将provided部分注释掉)

 

添加web.xml

打包成war,如果打包之后的文件中没有web.xml文件的话自己可以加进去一个最简单的web.xml(只有根节点的定义,而没有子元素),防止因缺乏web.xml文件而部署失败




 

你可能感兴趣的:(spring-boot,tomcat,linux)