环境

系统: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. 将SqlDataReader 数据集转化为datatbale ,在将datatable 转化为iList

    public IList GetModelList(string tablename, string where) { IList list = null; DataTable dataTable = ...

  2. SGU 438 The Glorious Karlutka River =)(最大流)

    Description A group of Mtourists are walking along the Karlutka river. They want to cross the river, ...

  3. wf效能分析

    听从了老师的建议我请教了其他的同学,修改了代码实现了功能四,以下是我的效能测试: 1.采用ptime.exe测试的3次截图 可以看到的是三次执行时间分别为:1.449秒:0.915秒:0.871秒,取 ...

  4. dataTables工作总结

    近期在工作中用到了dataTables,现在总结一下在工作中遇到的问题以及解决方法,如有不妥之处希望多多指教,定会改进. 首先这里用的是coloradmin框架,在vs环境下开发. 这里写一个容器用于 ...

  5. k邻近算法理解及代码实现

    github:代码实现 本文算法均使用python3实现 1 KNN   KNN(k-nearest neighbor, k近邻法),故名思议,是根据最近的 $ k $ 个邻居来判断未知点属于哪个类别 ...

  6. LintCode-105.复制带随机指针的链表

    复制带随机指针的链表 给出一个链表,每个节点包含一个额外增加的随机指针可以指向链表中的任何节点或空的节点. 返回一个深拷贝的链表. 挑战 可否使用O(1)的空间 标签 哈希表 链表 优步 code / ...

  7. CSS设计指南之CSS三种机制:继承、层叠和特指

    一.继承 CSS中的祖先元素也会向后代传递一样东西:CSS属性的值.body元素是所有元素的祖先,所有标签都是它的后代,比如为body元素设置一种字体,那么文档中的所有元素,无论它在层次结构中多么靠下 ...

  8. ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 表被锁的解决办法

    转自:https://blog.csdn.net/mchdba/article/details/38313881 前言:朋友咨询我说执行简单的update语句失效,症状如下:mysql> upd ...

  9. Flink的序列化与flink-hadoop-compatibility

    最近 用户提交了一个问题 说他的jar包里明明包含相关的类型 但是在提交Flink作业的时候 却报出classnotfound的错误 查看之后发现 这里是flink的一个没有说的太明白的地方 用户的代 ...

  10. TScreen 类

    TScreen表示应用程序运行时屏幕的状态. 类关系 TObject->TPersistent->TComponent TScreen引进具有表示下列各种情况的属性 什么窗体和数据模块已经 ...