一些執行在ARM單板電腦上的IoT應用通常會提供RESTful風格的API介面。本次的文章記錄如何在本地電腦上通過VS Code的遠端開發功能,在樹莓派端建立一個SpringBoot工程,並實現除錯和執行。
因為之前已經實現了在X86_64平臺上用VS Code新建SpringBoot工程和使用VS Code的遠端開發功能在樹莓進行開發。所以這次我們主要參考之前的經驗,完成下面的工作。
準備工作
在樹莓派上安裝JDK11或更高版本
本步驟是在樹莓派上執行的安裝
如之前文章所述,我的樹莓派2B板子的映象是ubuntu 21.04,因此我要先檢查下系統中的java版本:
$ java -version
如果你的系統顯示的java jdk版本為11或者更高,可以跳過本步驟。但我的系統提示我未安裝任何java程式,好在ubuntu系統給了一些安裝提示,因此我只需根據提示輸入想要安裝的版本命令即可(其他系統可以根據實際情況安裝,需要注意是需要安裝JDK而非JRE):
$ sudo apt-get install -y openjdk-11-jdk-headless
安裝好後再次檢視java版本,已經滿足要求:
$ java -version
openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment (build 11.0.13+8-Ubuntu-0ubuntu1.21.10)
OpenJDK Server VM (build 11.0.13+8-Ubuntu-0ubuntu1.21.10, mixed mode)
如果之前已經安裝了其他版本的Java,則可以在安裝新的Java版本後通過update-alternatives
命令切換Java版本。
安裝VSCode遠端伺服器端的擴充套件
本步驟在本地電腦使用VSCode的遠端開發能力連線到樹莓派端後再進行
首先要用VSCode遠端連線到樹莓派。然後在Extensions功能下安裝擴充套件到樹莓派伺服器端。
需要安裝的遠端擴充套件分別是Extension Pack for Java
和Spring Boot Extension Pack
如圖我已經在本地端安裝過Extension Pack for Java了,因此我要點選Install in SSH: x.x.x.x我的樹莓派端。同理安裝Spring Boot Extension Pack擴充套件到樹莓派端。
安裝完這兩個擴充套件後切換到Extensions的SSH: x.x.x.x-INSTALLED分組可以檢視遠端終端上安裝好的擴充套件。因為這兩個擴充套件包會包含許多其他擴充套件,因此你會看到下列擴充套件都已經被自動安裝上了。
在樹莓派上除錯SpringBoot
在安裝好樹莓派上的Java JDK11和相關的遠端VSCode擴充套件後,就可以像在本地開發SpringBoot工程一樣進行工作了。我們可以選擇從零新建一個SpringBoot工程,或者git clone一個在其他平臺已經開發好的工程。
在開發SpringBoot時我們經常遇到國外Maven倉庫源下載速度慢的問題,可以通過修改為國內源解決。
在樹莓派端從零新建一個SpringBoot起始工程
大體步驟與之前的文章一致:Ubuntu下使用VS Code建立Spring Boot工程
- 在VSCode遠端連線到樹莓派端後,開啟命令臺(
Ctrl+Shift+P
或F1
),輸入spring會顯示可用的SpringBoot命令,選擇Spring Initializr: Create a Maven Project即可。 - 選擇SpringBoot版本,根據需求選擇即可,這裡我選的是2.5.9,也可以選擇較高的版本,只是我比較擔心有些依賴會不支援較高的版本。
- 接下來選擇開發語言,我用的是java。
- 然後設定包名和專案名(GroupId和ArtifactID),分別代表
專案組織唯一識別符號
和專案唯一的識別符號
。 - 選擇打包型別未Jar
- 選擇Java版本為11,當然也有其他選項,由於VSCode的SpringBoot擴充套件包要求最低版本為11,因此我之前選擇配置JDK11。這個版本限制可以通過安裝低版本的擴充套件解決。
- 接下來選擇初始工程的依賴,根據需求選擇即可。
- 最後選擇工程儲存的目錄以完成建立。囉嗦下哈:這裡選擇的目錄是樹莓派端的儲存目錄,雖然我們此時是在本地電腦上的VSCode介面,但是實際正在遠端連線樹莓派端
或者開啟一個已有的工程
也可以直接clone我之前在x86_64平臺系統上建立的示例工程,然後直接開啟:
$ git clone https://github.com/congtou001/springboot-demo.git
由於該工程引用了Lombok依賴,並且使用了@Data註釋,開啟該工程後發現註釋無法正常使用。可能時你的VSCode遠端伺服器端沒有安裝Lombok擴充套件,需要安裝該擴充套件後才可以正常使用註解。
除錯並執行SpringBoot
這裡的步驟和在本地VSCode介面一致。在EXPLORER的SPRING BOOT DASHBOARD分組下找到開啟的的SpringBoot專案,點選專案名右側的Debug按鈕即可開始除錯。待專案編譯完並開始執行後,便可以在本地的任意瀏覽器開啟該專案的頁面了。
下圖顯示了在本地電腦上遠端除錯樹莓派專案的介面。由於專案的編譯和執行均是在樹莓派端執行,而我的樹莓派又是比較舊的2B版本,因此速度會慢不少。
可能遇到的問題: 我在第一次除錯該專案的時候直接導致樹莓派的1G記憶體瞬間跑滿,結果卡死了遠端服務。我的解決方案是為樹莓派的ubuntu系統建立了一個1G大小的swap交換記憶體。
下圖是在樹莓派2B端執行SpringBoot demo工程的api介面返回結果
遇到的問題
修改maven源映象到國內
由於Maven預設的settings.xml使用官方倉庫地址,因此國內下載依賴很慢,可以按照以下步驟配置為國內映象地址。
首先找到預設的settings.xml檔案,如果是linux系統下,一般是在使用者目錄的.m2資料夾內:~/.m2/settings.xml
。如果沒有,可以新建一個。
然後開啟或新建該.xml配置檔案來設定國內映象地址,在<mirrors>標籤內配置:
<mirror>
<id>aliyun-public</id>
<mirrorOf>*</mirrorOf>
<name>aliyun public</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<mirror>
<id>aliyun-central</id>
<mirrorOf>*</mirrorOf>
<name>aliyun central</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
<mirror>
<id>aliyun-spring</id>
<mirrorOf>*</mirrorOf>
<name>aliyun spring</name>
<url>https://maven.aliyun.com/repository/spring</url>
</mirror>
<mirror>
<id>aliyun-spring-plugin</id>
<mirrorOf>*</mirrorOf>
<name>aliyun spring-plugin</name>
<url>https://maven.aliyun.com/repository/spring-plugin</url>
</mirror>
<mirror>
<id>aliyun-apache-snapshots</id>
<mirrorOf>*</mirrorOf>
<name>aliyun apache-snapshots</name>
<url>https://maven.aliyun.com/repository/apache-snapshots</url>
</mirror>
<mirror>
<id>aliyun-google</id>
<mirrorOf>*</mirrorOf>
<name>aliyun google</name>
<url>https://maven.aliyun.com/repository/google</url>
</mirror>
<mirror>
<id>aliyun-gradle-plugin</id>
<mirrorOf>*</mirrorOf>
<name>aliyun gradle-plugin</name>
<url>https://maven.aliyun.com/repository/gradle-plugin</url>
</mirror>
<mirror>
<id>aliyun-jcenter</id>
<mirrorOf>*</mirrorOf>
<name>aliyun jcenter</name>
<url>https://maven.aliyun.com/repository/jcenter</url>
</mirror>
<mirror>
<id>aliyun-releases</id>
<mirrorOf>*</mirrorOf>
<name>aliyun releases</name>
<url>https://maven.aliyun.com/repository/releases</url>
</mirror>
<mirror>
<id>aliyun-snapshots</id>
<mirrorOf>*</mirrorOf>
<name>aliyun snapshots</name>
<url>https://maven.aliyun.com/repository/snapshots</url>
</mirror>
<mirror>
<id>aliyun-grails-core</id>
<mirrorOf>*</mirrorOf>
<name>aliyun grails-core</name>
<url>https://maven.aliyun.com/repository/grails-core</url>
</mirror>
<mirror>
<id>aliyun-mapr-public</id>
<mirrorOf>*</mirrorOf>
<name>aliyun mapr-public</name>
<url>https://maven.aliyun.com/repository/mapr-public</url>
</mirror>
重新編譯或除錯就會從國內maven映象倉庫下載依賴了。
為樹莓派端新建SWAP交換記憶體
新增swap檔案:
$ mkdir swap
$ cd swap
$ sudo dd if=/dev/zero of=sfile bs=1024 count=1000000
轉化並啟用為swap檔案:
$ sudo mkswap sfile
$ sudo swapon sfile
@Data註解無效
若新增了Lombok依賴後依然無法使用@Data等註解自動生成Setter和Getter,則可能是VSCode忘了安裝擴充套件Lombok Annotations Support for VS Code
。在Extensions中安裝該擴充套件即可。注意區分是安裝到本地還是遠端。