SpringBoot 項目打包及註冊windows服務自啓動
一、項目打包
maven打包命令爲mvn package, 打包去除測試爲mvn package -DskipTests。項目可以打包成jar或war兩種方式。
jar包
- 一個普通的springboot項目pom文件如下,包含了spring-boot-maven-plugin這個插件,能夠將依賴包都加進最終生成的jar包裏,並且能夠直接通過java -jar執行
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.aabond</groupId>
<artifactId>springboottodo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboottodo</name>
<description>Demo project for Spring Boot</description>
<properties>
<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>
</plugins>
</build>
</project>
- 通過以上方式打包的jar包經常是一個幾十兆的jar包,每當版本有變化,或者修復bug時,總要重新打包,上傳。由於公司內網不能連生產服務器,所以每次都是開熱點連,速度慢。
想減少jar包的大小,找到一個方法就是由於pom文件依賴的jar包一般很少變動,可以都放在lib文件夾下,打包只需要自己編寫的代碼,這種方式打包的jar最多幾兆大小,小一點的就幾百k,十分滿足我的需求。
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.aabond.springboottodo.Application</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<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>
-
在實際的開發中經常會有開發,生產,測試三種環境,編寫的代碼運行時配置文件會不同:例如端口號,數據庫,日誌級別等,如果把項目部署到這三種環境中,經常要改配置文件再打包,十分繁瑣。
針對這種情況,springboot了profile功能,通過此功能可以配置四種配置文件application-dev.properties 開發 application-test.properties 測試 application-prod.properties 生產 application.properties 默認
在IDEA中直接通過main方法啓動springboot,默認profile是default, 可以在Run -> Edit Configure配置命令行選項直接使用dev配置文件,這裏只是在默認配置文件中加入以下,就可以指向開發配置文件
spring.profiles.active=dev
然後在部署時使用java -jar命令時指定profile,就能使用不同環境的配置文件了
java -jar springboottodo.jar --spring-profiles.active=prod
war包
只需要在pom.xml將<packaging>war</packaging>
加進去就ok,注意排除內嵌tomcat依賴
二、註冊windows服務自啓動
-
目的:在windows服務器上,部署springboot jar包,由於服務器重啓會造成服務掛掉,需要將項目做成服務自啓動
-
參考博客:https://blog.csdn.net/rico_zhou/article/details/81283953
-
實戰
-
下載https://github.com/kohsuke/winsw/releases/download/winsw-v2.2.0/WinSW.NET4.exe,根據名字看這個工具依賴於.net4環境。
-
將jar包,和下載的WinSW.NET4.exe放在一個目錄下
-
編寫xml文件
<configuration> <id>springboottodo</id> <name>springboottodo</name> <description>This is a springboottodo service.</description> <env name="JAVA_HOME" value="C:\Program Files\Java\jdk1.8.0_221"/> <executable>java</executable> <arguments>-jar springboottodo.jar --spring-profiles.active=prod</arguments> <!-- 開機啓動 --> <startmode>Automatic</startmode> <logmode>rotate</logmode> </configuration>
-
改名,需要將exe,xml兩個文件都改成一樣的名字,注意上面xml中配置jar包的名字,這裏都應該改成springboottodo
-
管理員執行springboottodo.exe install 註冊成服務,然後net start springboottodo開啓服務,如果開啓失敗可以去目錄下找error.log日誌,查看原因
-