• springboot-部署到centos7


    环境

    系统: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.8.0_161
    JRE_HOME=/usr/local/jdk1.8.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.30.tar.gz

    第三步:启动

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

    cd /usr/local/apache-tomcat-8.5.30/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.1-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.1-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.1-SNAPSHOT.jar

    指定端口运行

    java -jar springboot-helloworld-0.0.1-SNAPSHOT.jar --server.port=8082

    后台运行

    方法一:

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

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

     

    查看启动后的服务:

    ps -ef | grep java

    关闭服务:

    kill -9 3730

    方法二: 

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

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

  • 相关阅读:
    java网络编程之图片上传
    java网络编程之Socket编程
    sql查询优化
    sql语句in
    结构型模式总结(14)
    Python程序中的进程操作-进程间数据共享(multiprocess.Manager)
    同步异步阻塞非阻塞
    Python程序中的进程操作-进程池(multiprocess.Pool)
    Python程序中的进程操作-开启多进程(multiprocess.process)
    Python程序中的进程操作-进程同步(multiprocess.Lock)
  • 原文地址:https://www.cnblogs.com/zuidongfeng/p/8859229.html
Copyright © 2020-2023  润新知