环境

系统:centos7 64位

安装jdk

第一步:下载

先进入官网:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

方法一:下载安装包到本地,再上传到服务器

根据系统选择相应版本,服务器是centos7 64位的,所以选择下载linux x64的安装包

下载成功后,使用xtfp 5将安装包上传到/usr/local(根据自己习惯,选择目录)目录下

方法二:wget下载

复制安装包下载路径:

执行wget命令:

wget --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie;" http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/jdk-8u161-linux-x64.tar.gz

如下图所示:

第一种下载方法要先下载到本地,再使用工具上传到centos7服务器上, 比较耗时,推荐使用wget方式来下载安装包。

第二步:解压

切换到安装包保存目录:

cd /usr/local/

解压到当前目录:

tar -zxvf jdk-8u161-linux-x64.tar.gz

第三步:配置环境变量

打开系统环境变量配置文件:

vim /etc/profile

在profile文件末尾加上如下内容:

## JAVA
JAVA_HOME=/usr/local/jdk1..0_161
JRE_HOME=/usr/local/jdk1..0_161/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH

输入:wq保存退出。

第四步:配置文件生效

为了使得配置文件立即生效,执行如下命令

source /etc/profile

第五步:测试jdk是否安装成功

查看jdk版本信息:

java -version

控制台输出如下信息,表示安装成功:

安装tomcat

第一步:下载

tomcat下载方式与jdk下载方式类似,也是有两种方法。

先进入tomcat官网:https://tomcat.apache.org/download-80.cgi

方法一:先从官网下载到本地,再上传到服务器

选择下载tomcat8.5.30版本,如下图:

下载成功后,使用xtfp 5将安装包上传到/usr/local(根据自己习惯,选择目录)目录下

方法二:wget下载

wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.30/bin/apache-tomcat-8.5.30.tar.gz

第二步:解压

切换到tomcat下载目录:

cd /usr/local

解压到当前目录:

tar -zxvf apache-tomcat-8.5..tar.gz

第三步:启动

切换到解压后的tomcat的bin目录下:

cd /usr/local/apache-tomcat-8.5./bin

执行启动命令:

./startup.sh

查看tomcat启动日志:

tail -f ../logs/catalina.out

发现启动耗时太长,解决方法可参考此篇文章:https://blog.csdn.net/u013939884/article/details/72860358

我自己是通过修改JRE中的java.security文件为 securerandom.source=file:/dev/urandom来解决该问题。

第四步:测试

访问网址:http://ip:8080/,访问时将ip替换为自己的服务器ip,出现如下画面,表示tomcat启动成功。

备注:如果tomcat启动成功,但是该页面又访问不了,请检查8080端口是否开放。

演示项目

以下部署方式均基于maven构建的springboot项目,项目名称springboot-helloworld,开发工具为IntelliJ IDEA,以下检查为idea。

项目目录结构

代码

ServletInitializer类:该类用于已tomcat方式启动springboot

package com.lnjecit.springboothelloworld;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer; public class ServletInitializer extends SpringBootServletInitializer { @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringbootHelloworldApplication.class);
} }

HelloWorldController类:

package com.lnjecit.springboothelloworld.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; /**
* @author
* @create 2018-04-16 16:06
**/
@RequestMapping("/helloWorld")
@RestController
public class HelloWorldController { @RequestMapping("/sayHello")
public String sayHello(@RequestParam("name") String name) {
return "Hi, " + name;
}
}

以war包方式部署

步骤:

第一步:将项目打包方式修改为war

第二步:在idea中Terminal控制台执行maven打包命令

mvn clean package -Dmaven.test.skip=true

命令执行完毕后,在target目录下生成了war包,如下图:

第三步:使用xftp将war包上传到服务器/usr/local/apache-tomcat-8.5.30/webapps目录下

先将该目录下的ROOT目录删除,然后将springboot-helloworld-0.0.1-SNAPSHOT.war重命名为ROOT.war

第四步:启动tomcat

第五步:测试

在浏览器中输入:http://ip:8080/helloWorld/sayHello?name=李白 ip改为自己服务器的ip

到这里就部署成功了。

但是这样每次以war包方式打包,war包比较大,我们解压解压之后,可以看到文件总共13.7M,lib包也是13.7M,而classes文件夹只有2.69kb

可以看到lib包的大小占到了90%以上,实际代码容量非常小,每次都重新打war包,实际上是比较麻烦的,也没有必要。所以在部署实际项目的时候,如果决定要以war包方式部署项目,我通常在pom依赖没有改变的时候,只会将项目target目录下的classes目录覆盖服务器上的classes目录即可,如下图:

这样可以大幅度的提升项目部署速度,尤其是在网速比较慢的时候。

只有当pom依赖有改动,才重新打一个完整的war包部署到服务器上。

以jar包方式部署

完整jar包

第一步:将项目打包方式修改为jar

第二步:在idea中Terminal控制台执行maven打包命令

mvn clean package -Dmaven.test.skip=true

命令执行完毕后,在target目录下生成了jar包,如下图:

第三步:使用xftp将jar包上传到服务器/usr/local/springboot-helloworld目录下

第四步:运行jar包

先切换到jar包所在目录:

cd /usr/local/springboot-helloworld/

运行jar:

java -jar springboot-helloworld-0.0.-SNAPSHOT.jar

出现如下信息表示启动成功:

第五步:测试

在浏览器中输入:http://ip:8080/helloWorld/sayHello?name=李白 ip改为自己服务器的ip

到这里就部署成功了。

缺点:

1、打包后,配置文件和依赖包都在jar包内部,配置文件无法修改。而实际项目中,开发环境的配置与服务器环境配置并不完全一致,例如数据库信息,日志信息保存路径等,想要修改配置文件也无法修改

2、项目依赖包一般不会有变化,但是每次打包都会把依赖包打包到jar包内

3、控制台页面一关闭,springboot服务也关闭

Jar包、配置文件、依赖包分开打包

由于每次以jar包方式部署会有上面说的缺点,为了解决这些问题,可以将jar包、配置文件、依赖包分开打包。分开打包后,有如下好处:

1、可以实现当依赖包有变化时,才重新打包依赖包

2、配置文件也可以修改

3、由于依赖包和jar包分离,可以减少jar文件大小。jar文件减少,可以缩短上传到服务器的时间

第一步:pom文件修改如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.lnjecit</groupId>
<artifactId>springboot-helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>springboot-helloworld</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<!--<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>--> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<excludes>
<exclude>*.properties</exclude>
<exclude>*.yml</exclude>
</excludes>
<archive>
<manifest>
<!-- 为依赖包添加路径, 这些路径会写在MANIFEST文件的Class-Path下 -->
<mainClass>com.lnjecit.springboothelloworld.SpringbootHelloworldApplication</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
<useUniqueVersions>false</useUniqueVersions>
</manifest>
<manifestEntries>
<!-- 在Class-Path下添加配置文件的路径 -->
<Class-Path>config/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-xmls</id>
<phase>process-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/config</outputDirectory>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<includes>
<include>*.properties</include>
<include>*.yml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>target/lib/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build> </project>

第二步:在idea中Terminal控制台执行maven打包命令

mvn clean package -Dmaven.test.skip=true

命令执行完毕后,在target目录下生成了jar包、config、lib三部分,如下图:

第三步:使用xftp将jar包上传到服务器/usr/local/springboot-helloworld/deploy目录下

第四步:运行jar包

先切换到jar包所在目录:

cd /usr/local/springboot-helloworld/deploy/

springboot默认启动端口为8080,为了测试分开打包后可以修改配置文件,在application.properties文件中修改启动端口为8081

运行jar:

java -jar springboot-helloworld-0.0.-SNAPSHOT.jar

在控制台可以看到启动端口变成了8081,如下图:

测试:

在浏览器中输入:http://ip:8081/helloWorld/sayHello?name=阿飞 ip改为自己服务器的ip

demo下载地址:https://github.com/linj6/springboot-learn/tree/master/springboot-helloworld

以jar包方式启动还有一个问题,当springboot服务启动端口关闭,服务也停止了。后面介绍将springboot设置为后台服务,启动窗口关闭后,服务依然运行。

Jar包运行

普通运行

java -jar springboot-helloworld-0.0.-SNAPSHOT.jar

指定端口运行

java -jar springboot-helloworld-0.0.-SNAPSHOT.jar --server.port=

后台运行

方法一:

nohup java -jar springboot-helloworld-0.0.-SNAPSHOT.jar &

启动后再当前目录生成一个nohup.out文件

查看启动后的服务:

ps -ef | grep java

关闭服务:

kill - 

方法二:

nohup java -jar demo.jar & > log.file >& &

springboot项目部署方式介绍完了,个人推荐使用将jar、配置文件、依赖包分开打包的方式来部署项目。

springboot-部署到centos7的更多相关文章

  1. JRebel springboot部署idea

    JRebel springboot部署idea     http://127.0.0.1:8888/88414687-3b91-4286-89ba-2dc813b107ce   ctrl+shift+ ...

  2. Redis介绍及部署在CentOS7上(一)

    0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...

  3. ASP .Net Core系统部署到 CentOS7 64 具体方案

    .Net Core 部署到 CentOS7 64 位系统中的步骤 1.安装工具 1.apache 2..Net Core(dotnet-sdk-2.0) 3.Supervisor(进程管理工具,目的是 ...

  4. SpringBoot 部署 docker 打包镜像

    SpringBoot 部署 docker 打包镜像 环境: 1.代码编写工具:IDEA 2.打包:maven 3.docker 4.linux 7.JDK1.8 8.Xshell 9.Xftp 第一步 ...

  5. 将SpringBoot部署在外部tomcat中

    一,前言 在文章SpringBoot之简单入门中提到了,SpringBoot是内置一个tomcat容器的,但是如果要将SpringBoot部署在一个外部的tomcat,要怎么办呢?这就是本篇文章的目的 ...

  6. .Net Core2.0秒杀CMS部署到Centos7.3遇到的坑,酸爽呀

    一.Centos7.3的安装 打开VirtualBox,点击新建,如下图所示: 点击“下一步”,弹出下面的对话框,调整内存大小,建议设置为2G,这样操作更流畅点 设置好,点击“OK”,再点击“启动”, ...

  7. Springboot 部署到linux(二)

    之前写了一篇部署的文章,但是打包时会运行所有的单元测试,如果不想测试的话,可以采用这种方式. 第一部分:打包 1.pom.xm添加配置 <plugin> <groupId>or ...

  8. SpringBoot 部署到linux环境

    第一部分:Springboot项目部署 说明:工具使用的是IEDA 第一:项目打包 1.在pom文件中添加插件 <build> <plugins> <plugin> ...

  9. SpringBoot部署jar与war

    jar部署与启动/关闭 1.打包 clean 清理已有target目录 package 重新打包 获取打包路径,通过 scp命令发送到服务器端,scp -P ${port} ${.jar} ${use ...

  10. .Net core2.0+Mysql5.7部署到CentOS7.5完整实践经验

    本文为本人最近学习将.Net Core部署到Linux的一些经验总结,也提供点也和我一样对Linux接触不多的.Net Core开发者. 一.部署用到的环境和工具 1.Linux采用最新的CentOS ...

随机推荐

  1. POJ 1921 Paper Cut(计算几何の折纸问题)

    Description Still remember those games we played in our childhood? Folding and cutting paper must be ...

  2. HDU 4169 Wealthy Family(树形DP)

    Problem Description While studying the history of royal families, you want to know how wealthy each ...

  3. python学习笔记07:自定义类型

    class person: def __init__(self,name,age,weight): self.name = name self.age = age self.weight = weig ...

  4. 201621123034 《Java程序设计》第5周学习总结

    作业05-继承.多态.抽象类与接口 1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 答:关键字:接口.继承.多态 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一般 ...

  5. printf以及各种变种

    int printf(char *format, [argument]); 其向终端(显示器.控制台等)输出字符 int fprintf(FILE*stream, const char*format, ...

  6. C#中pictureBox笔记

    if (File.Exists(productInfo.预览图路径)) this.picPreview.Image = BitmapFactory.Alloc(productInfo.预览图路径, f ...

  7. Calendar简单用法

  8. Java 多线程 三种实现方式

    Java多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没 ...

  9. 从HR 到SBP其实还有很长的一段路要走

    战略性业务伙伴 Strategic business partners 关于这本书,一般是因为好奇,从HR到BP的角色,再到这个SBP,其实是一段没有走过的很虚的过程,不过总归是需要灯塔,即使偶尔只是 ...

  10. Redis哨兵的详解

    1 哨兵的作用 哨兵是redis集群架构中非常重要的一个组件,主要功能如下: 集群监控:负责监控redis master和slave进程是否正常工作 消息通知:如果某个redis实例有故障,那么哨兵负 ...