Springboot项目部署到阿里云服务器(war和jar)
阅读原文时间:2021年04月21日阅读:1

云服务器:阿里云ECS CentOS 7.3 64位 IDE:IntelliJ IDEA 服务器远程连接工具:Xshell

Spring Boot 默认自带了一个嵌入式的Tomcat服务器,可以以jar方式运行,更为常见的情况是需要将Spring Boot 应用打成一个war包,部署到Tomcat等服务器上。

首先声明这是一个maven项目。

使用War包方式上传远程服务器

  1. 在pom.xml文件中,将打包方式设置为war。

  2. 修改启动类,重写初始化方法:继承自SpringBootServletInitializer,重写configure函数。

    public class Test01Application extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return super.configure(builder);
    }

     public static void main(String[] args) {
         SpringApplication.run(Test01Application.class, args);
     }

    }

  3. 去除自带的tomcat:有两种方式,方式a.如下

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

         </dependency>

方式B:需要将嵌入的Tomcat依赖方式改成provided(编译、测试时将依赖的包加入本工程的classpath,运行时不加入,可以理解成运行时不使用Spring Boot 自带的Tomcat)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
  1. 加入servlet-api依赖

    javax.servlet javax.servlet-api 3.1.0 provided

  2. 双击package,在target目录下生成war包文件。

  3. 部署:将war文件放到云服务器Tomcat的webapps目录下,启动Tomcat(在bin目录下执行./startup.sh),即可自动解压部署。

  4. 打开浏览器,输入服务器地址:端口号(默认8080)/项目jar包名/swagger-ui.html

需要注意的是:
  1. 由于不使用Spring Boot 自带的Tomcat所以yml文件下的server配置不起作用,故,服务器默认Tomcat端口是8080,路径输入的是项目jar包的名称。

  2. 默认情况下,项目路径是jar/war包的名称,如果想修改的话,可以在server.xml中加上了<Context docBase="MyProject.war" path="/demo" reloadable="true" debug="0" privileged="true">,输入地址就可以用demo代替MyProject。

  3. 注意:如果在server.xml中加上了<Context docBase="MyProject.war" path="/demo" reloadable="true" debug="0" privileged="true">语句,那么需要特别注意的是,该项目的war包不能被删除,否则Tomcat将无法启动。

使用jar包上传远程云服务器

使用jar包的方式直接打包Springboot项目上传远程云服务器及其简单。

首先,如果没有在pom.xml文件中修改默认的package的话,默认就是以jar方式打包,(如果之前有修改,将war改为jar即可)。

然后点击Maven-package,如下图。注意选择打包时跳过测试。

之后会在target目录下找到打包之后的jar文件,然后通过工具上传至云服务器的自定义的目录下(工具自选,我用的是Xshell的rz命令)

上传之后,在jar包所在目录下,输入命令

java -jar YourProjectName.jar 
//想指定端口可以,不过我觉得没必要,毕竟在控制台已经输出的对应的端口了
java -jar YourProjectName.jar --server.port=8088

输入命令之后就会出现如图所示,程序已经启动,之后在浏览器中输入 远程服务器的地址:在application.properties中设置的端口/jar包名/主页。

后台运行jar包

这样的情况下,关闭Xshell窗口程序就会自动退出如果需要后台进行,我们可以使用下列命令进行部署:

<1>首次部署
//首次部署:
nohup java -jar demo01.jar >temp.text & 
//退出 ctrl + c 

其中:
—nohup 当账户退出或终端关闭时,程序仍然运行
— & 客户端关闭,后台停止运行
— temp.text 是存控制台文件(缺省情况下该作业的所有输出被重定向到nohup.out的文件中)
— 使用 tail -f temp.text 实时查看控制台文件

可通过jobs命令列出所有后台运行任务,并且每个作业前面都有个编号。
如果想将某个作业调回前台控制,只需要 fg + 编号即可。

<2>非首次部署

非首次部署当前程序需要在对应的文件夹中执行以下命令

a.捕获上一个版本程序的进程 ps - ef|grep demo.jar
b.杀死对应的进程 kill 进程号
c.启动程序 nohup java -jar demo.jar >temp.text &
d.退出 ctrl + c
e.查看日志 tail -500f temp.text

总结

1、jar包部署方式使用Spring Boot 自带的Tomcat,因为Spring Boot 应用自带Tomcat,所以可直接在服务器运行jar文件

2、war包部署方式则使用云服务器里的Tomcat,此时需要移除Spring Boot 自带的Tomcat插件

3、注意2种部署方式的访问路径差异

4、注意所用端口号是否已在安全组开放

部分转自:https://blog.csdn.net/weixin_39274753/article/details/81557501