在樹莓派上開發SpringBoot 之使用VSCode遠端開發

蔥頭001發表於2022-02-02

一些執行在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 JavaSpring Boot Extension Pack

如圖我已經在本地端安裝過Extension Pack for Java了,因此我要點選Install in SSH: x.x.x.x我的樹莓派端。同理安裝Spring Boot Extension Pack擴充套件到樹莓派端。

Extension Pack for Java擴充套件

安裝完這兩個擴充套件後切換到ExtensionsSSH: x.x.x.x-INSTALLED分組可以檢視遠端終端上安裝好的擴充套件。因為這兩個擴充套件包會包含許多其他擴充套件,因此你會看到下列擴充套件都已經被自動安裝上了。

樹莓派終端上安裝好的VSCode擴充套件

在樹莓派上除錯SpringBoot

在安裝好樹莓派上的Java JDK11和相關的遠端VSCode擴充套件後,就可以像在本地開發SpringBoot工程一樣進行工作了。我們可以選擇從零新建一個SpringBoot工程,或者git clone一個在其他平臺已經開發好的工程。

在開發SpringBoot時我們經常遇到國外Maven倉庫源下載速度慢的問題,可以通過修改為國內源解決。

在樹莓派端從零新建一個SpringBoot起始工程

大體步驟與之前的文章一致:Ubuntu下使用VS Code建立Spring Boot工程

  • 在VSCode遠端連線到樹莓派端後,開啟命令臺(Ctrl+Shift+PF1),輸入spring會顯示可用的SpringBoot命令,選擇Spring Initializr: Create a Maven Project即可。
  • 選擇SpringBoot版本,根據需求選擇即可,這裡我選的是2.5.9,也可以選擇較高的版本,只是我比較擔心有些依賴會不支援較高的版本。
  • 接下來選擇開發語言,我用的是java
  • 然後設定包名和專案名(GroupId和ArtifactID),分別代表專案組織唯一識別符號專案唯一的識別符號
  • 選擇打包型別未Jar
  • 選擇Java版本為11,當然也有其他選項,由於VSCode的SpringBoot擴充套件包要求最低版本為11,因此我之前選擇配置JDK11。這個版本限制可以通過安裝低版本的擴充套件解決。
  • 接下來選擇初始工程的依賴,根據需求選擇即可。
  • 最後選擇工程儲存的目錄以完成建立。囉嗦下哈:這裡選擇的目錄是樹莓派端的儲存目錄,雖然我們此時是在本地電腦上的VSCode介面,但是實際正在遠端連線樹莓派端

樹莓派終端上新建SpringBoot

或者開啟一個已有的工程

也可以直接clone我之前在x86_64平臺系統上建立的示例工程,然後直接開啟:

$ git clone https://github.com/congtou001/springboot-demo.git

樹莓派終端上開啟已有SpringBoot工程

由於該工程引用了Lombok依賴,並且使用了@Data註釋,開啟該工程後發現註釋無法正常使用。可能時你的VSCode遠端伺服器端沒有安裝Lombok擴充套件,需要安裝該擴充套件後才可以正常使用註解。

除錯並執行SpringBoot

這裡的步驟和在本地VSCode介面一致。在EXPLORERSPRING BOOT DASHBOARD分組下找到開啟的的SpringBoot專案,點選專案名右側的Debug按鈕即可開始除錯。待專案編譯完並開始執行後,便可以在本地的任意瀏覽器開啟該專案的頁面了。

下圖顯示了在本地電腦上遠端除錯樹莓派專案的介面。由於專案的編譯和執行均是在樹莓派端執行,而我的樹莓派又是比較舊的2B版本,因此速度會慢不少。

可能遇到的問題: 我在第一次除錯該專案的時候直接導致樹莓派的1G記憶體瞬間跑滿,結果卡死了遠端服務。我的解決方案是為樹莓派的ubuntu系統建立了一個1G大小的swap交換記憶體

樹莓派終端除錯SpringBoot

下圖是在樹莓派2B端執行SpringBoot demo工程的api介面返回結果

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中安裝該擴充套件即可。注意區分是安裝到本地還是遠端。

本文參考

同時釋出於:在樹莓派上開發SpringBoot 之使用VSCode遠端開發

相關文章