springboot分離打包並部署到centos的服務腳本編寫

maven構建的springboot項目打包很方便,可是若是項目是多模塊的,依賴的第三方jar包可能比較多時,最終打包的jar包會很大,甚至超過100M,這對於版本迭代頻率比較高的狀況是比較浪費時間的,而當項目架構定下來後,一般第三方依賴包是不變的,好比:spring-boot-starter選用的是2.1.2.RELEASE,那麼後續就基本不會改變了,因此想到要給項目瘦身。java

假設我有一個多模塊的項目,由core、model、dao、service等基礎模塊以及web-apiweb-api-admin這兩個web模塊組成,web

web-api爲例,該模塊依賴那四個基礎模塊,pom.xml裏的build寫法以下:spring

<build>
    <finalName>api</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <!--此處修改成你的應用入口類全路徑-->
                        <mainClass>com.benseji.api.ApiApplication</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <!--這個插件就是把依賴的jar包複製出來放到編譯後的target/lib目錄,而且在打包時候排除內部依賴-->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        <overWriteReleases>false</overWriteReleases>
                        <overWriteSnapshots>false</overWriteSnapshots>
                        <overWriteIfNewer>true</overWriteIfNewer>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

在打包的時候,首先要在父模塊執行mvn clean install,若是不執行該命令,則core、model、dao、service等模塊的代碼仍是舊的。

執行完以後,切到web-api模塊下,執行mvn clean package,等待執行結束:apache

依賴包所有打包到了lib目錄下,這樣子api.jar就變得很小,接着使用ftp軟件將文件傳到服務器上。

好比在/webapps/api文件夾下,有這四個文件api

1.編寫啓動腳本start.sh(需添加執行權限)

#!/bin/sh
java -Dloader.path="lib/" -jar /webapps/api/api.jar --spring.profiles.active=pro --server.port=8081 > /home/benseqifu/logs/api.log &
echo $! > /var/run/api.pid

2.編寫中止腳本stop.sh(需添加執行權限)

#!/bin/sh
PID=$(cat /var/run/api.pid)
kill -9 $PID

3.編寫註冊服務springboot

在/etc/systemd/system下編寫api-service腳本(ExecStart和ExecStop的路徑對應上面兩個腳本路徑)bash

[Unit]
Description=apiservice for xxx
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/webapps/api/start.sh
ExecStop=/webapps/api/stop.sh
PrivateTmp=true

[Install]
WantedBy=multi-user.target

4.服務操做命令

systemctl enable api-service    #開機自啓動

systemctl start api-service      #啓動

systemctl stop api-service    #中止

在執行啓動服務的腳本後,會在/var/run目錄下多出一個api.pid文件,裏面的數字就是服務運行的進程編號,當服務中止後該文件就自動刪除了,項目運行的日誌文件在 /home/benseqifu/logs/api.log ,查看它 tail -500f api.log,部份內容以下:服務器

其中啓動以後自定義處理代碼:架構

相關文章
相關標籤/搜索