記一次初學者的spring boot 打包部署

作爲一個前端程序員,好不容易用第一次使用spring boot 寫了一個項目,idea裏面運行的ok,心裏暗自竊喜。但是沒想到打包就出現問題,折騰了一天,現在總結一下;

 

先看一下我的項目的結構:

這是我的項目,主項目是一個spring boot 項目,用來作爲服務端。還有一個ArcFaceSDK模塊,這是一個java模塊,用來請求服務端。

 

先說一下ArcFaceSDK模塊的打包:

這個比較簡單,因爲是一個java模塊,所以打成jar包就可以了。

首先打開:

 

然後,選擇artifacts 點擊+

下一步:

下一步,在彈出的對話框中選擇要打包的module,如果有mainClass 選擇:

然後一路ok保存就好。

 

配置完成,接着就是執行打包。

build-->build Artifacts

 

 

然後 項目的目錄下面就產生了這個jar:

 

到此,java模塊打包成jar完成;

 

接着是主項目的打包:

首先說明一下 spring boot 項目是自帶服務器的,這意味着你可以不依賴其他服務器(比如tomcat)運行。 當你自身運行的時候,只需要電腦上裝有java環境即可。當然你也可以不使用自身的服務器。所以這個時候有兩種打包方式:

1. 打包成jar, 自身運行;

2. 打包成war,依附於其他服務器運行;

這裏介紹第一種。

 

maven 插件給我們提供了一種很簡單的打包方式,就是使用插件自帶的功能。

首先打開maven預覽:

如果默認沒有,可以使用這種方式打開:

 

打開後看到lifecycle下面的任務,我們打包需要的就是下面這兩個,首先執行一下clean,然後執行一下package,就會生成了。

 

彆着急,在生成之前我們需要對輸出文件配置一下,因爲是maven提供的打包,所以我們需要在pom裏提供配置:

添加紅色框裏面的配置,意思是我們即將輸出 jar包(也可以配置成war),下面就是jar包的名字和描述,最後生成的文件名會以name和上面的version拼接作爲結果。

 

這時候我們依次點擊一下 clean 和 package,生成文件如下:

 

項目啓動:

cd 到jar所在的,目錄,執行:

java -jar arcfaceserver-0.0.1-SNAPSHOT.jar

就可以了。

 

好,一般的項目到這裏就基本完成了,但是我的啓動的時候會報錯誤,很多Class 沒找到。很快我發現了原因,因爲我項目中引入了一個本地的jar包文件,而maven打包時沒有將它打包進去。

 

解決辦法就是吧本地jar依賴轉化爲maven依賴,在pom 中添加:

<!--加入本地依賴-->
<dependency>
   <groupId>com.arcsoft.face</groupId>
   <artifactId>arcsoft-sdk-face</artifactId>
   <version>2.2.0.1</version>
   <scope>system</scope>
   <systemPath>${project.basedir}/src/lib/arcsoft-sdk-face-2.2.0.1.jar</systemPath>
</dependency>

它在我項目中的真實目錄爲:

 

只添加了這個還不夠,運行的時候還是找不到,查了很久,原來還要加上這句話:

附上代碼:

    <build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<!--加入下面可以將本地jar打包進去 -->
				<configuration>
					<executable>true</executable>
					<includeSystemScope>true</includeSystemScope>
				</configuration>
			</plugin>
		</plugins>
	</build>

到此爲止,我的本地jar包終於成功打包進去,運行項目正常。

 

到這裏作爲初學者還不是很完美,因爲打包後的jar我門怎麼動態修改端口號,數據庫信息什麼的呢?總不能每次修改重新打包啊,我的暫時的解決辦法如下:

使用啓動命令:

java -jar arcfaceserver-0.0.1-SNAPSHOT.jar --server.port=8084

上面的命令可以配置服務的端口號。

類似的還有下面的參數,這是在application.properties中的參數,都可以以上面的形式配置。

spring.datasource.url=jdbc:mysql://localhost:3306/faceDB
spring.datasource.username=root
spring.datasource.password=xxxxxxxxxxxx
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5
# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect


#指定端口號
server.port=8082
#指定context path
#server.context-path=/test 被棄用
server.servlet.context-path=/arcfaceserver

 

當然,把所有參數都寫進腳本文件中太不美觀,還有一種非常優雅的方式:

在jar文件同級目錄建立config文件夾,將application.properties 文件拷貝進去, 就 ok 了。

爲什麼? 這裏拷貝別人的文章中的一段:

應用程序屬性文件
  SpringApplication 將從 application.properties 以下位置的文件中加載屬性並且將其添加到 Spring 的環境當中:

當前目錄下的 /config 子目錄
當前目錄
classpath中的 /config 目錄
classpath根目錄

  該列表按照優先級的順序排列(在列表中較高的位置定義的屬性將會覆蓋在較低位置定義的屬性)。

  如果您不喜歡 application.properties 作爲配置文件名,則可以通過指定 spring.config.name 環境屬性來切換到另一個名稱。還可以使用 spring.config.location 環境屬性(以逗號分隔的目錄位置列表或文件路徑)引用顯式位置。 
  比如:

java -jar myproject.jar --spring.config.name = myproject
1
java -jar myproject.jar --spring.config.location =
classpath:/default.properties,classpath:/override.properties
1
2
java -jar -Dspring.config.location=
D:\speech\default.properties analysis-speech-tool-0.0.1-SNAPSHOT.jar


 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章