SpringBoot學習小結之打包及windows註冊服務自啓動

SpringBoot 項目打包及註冊windows服務自啓動

一、項目打包

maven打包命令爲mvn package, 打包去除測試爲mvn package -DskipTests。項目可以打包成jar或war兩種方式。

jar包

  1. 一個普通的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>
  1. 通過以上方式打包的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>
  1. 在實際的開發中經常會有開發,生產,測試三種環境,編寫的代碼運行時配置文件會不同:例如端口號,數據庫,日誌級別等,如果把項目部署到這三種環境中,經常要改配置文件再打包,十分繁瑣。
    針對這種情況,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

  • 實戰

    1. 下載https://github.com/kohsuke/winsw/releases/download/winsw-v2.2.0/WinSW.NET4.exe,根據名字看這個工具依賴於.net4環境。

    2. 將jar包,和下載的WinSW.NET4.exe放在一個目錄下

    3. 編寫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>
      
    4. 改名,需要將exe,xml兩個文件都改成一樣的名字,注意上面xml中配置jar包的名字,這裏都應該改成springboottodo

    5. 管理員執行springboottodo.exe install 註冊成服務,然後net start springboottodo開啓服務,如果開啓失敗可以去目錄下找error.log日誌,查看原因

發佈了74 篇原創文章 · 獲贊 27 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章