一些運作在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擴充到樹莓派端。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL0MzM3cjNzgDMy0iM4ATMzUTMxEjMwIDMyIDMy0COxUTMycjMvwlMwIjMwIzLchTM1EjM3IzLcd2bsJ2Lc12bj5ycn9Gbi52YuIjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
安裝完這兩個擴充後切換到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
),輸入spring會顯示可用的SpringBoot指令,選擇Spring Initializr: Create a Maven Project即可。F1
- 選擇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中安裝該擴充即可。注意區分是安裝到本地還是遠端。
本文參考
- Maven 國内源配置
同時釋出于:在樹莓派上開發SpringBoot 之使用VSCode遠端開發
本文來自部落格園,作者:蔥頭001,轉載請注明原文連結:https://www.cnblogs.com/congtou001/p/15860159.html