在树莓派上开发SpringBoot 之使用VSCode远程开发
一些运行在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中安装该扩展即可。注意区分是安装到本地还是远程。
本文参考
同时发布于:在树莓派上开发SpringBoot 之使用VSCode远程开发
在树莓派上开发SpringBoot 之使用VSCode远程开发的更多相关文章
- VSCode 远程开发(带免密)
VSCode 远程开发(带免密) 简介 Visual Studio Code(以下简称 VS Code)从1.35.0版本正式提供可以在本地编辑远程开发环境的文件的功能,具体实现如下图 安装完成Rem ...
- vscode 远程开发安装
1 首先windows 有ssh 程序 2 没有的话就直接使用git bash 登录到远程服务器开发机上 3 再开一个Git bash 执行 ssh-keygen.exe 生成秘钥 然 ...
- vscode远程开发安装
https://www.cnblogs.com/xiaoqi/p/vs-code-remote.html ============================= https://blog.csdn ...
- Flask15 远程开发环境搭建、安装虚拟机、导入镜像文件、创建开发环境、pycharm和远程开发环境协同工作
1 安装VM虚拟机 待更新... 2 导入镜像文件 待更新... 3 启动虚拟机 4 远程连接虚拟机 4.1 安装xShell软件 待更新... 4.2 创建一个新的连接 4.2.1 在虚拟机中获取虚 ...
- VSCode 配置阿里云CentOS 7.6 远程开发
配置步骤 一.windows 10 开发机配置 windows 10 1809后支持ssh命令 1.生成ssh密钥.使用以下命令,先生成本地公钥和私钥ssh-keygen -t rsa -b 4096 ...
- Visual Studio Code 远程开发探秘
摘要: IDE新时代! 作者:SHUHARI 的博客 原文:Visual Studio Code 远程开发探秘 Fundebug按照原文要求转载,版权归原作者所有. 在以前的文章 有趣的项目 - 在浏 ...
- 转: NetBean 远程开发的好文2 --> 工欲善其事,必先利其器系列--Netbeans之远程开发
转自: http://www.cnblogs.com/zuoca/archive/2012/07/09/Remote_Development_With_Netbeans_origin.html 实践 ...
- 转: 工欲善其事,必先利其器系列--Netbeans之远程开发
转自: http://www.cnblogs.com/zuoca/archive/2012/07/09/Remote_Development_With_Netbeans_origin.html 工欲善 ...
- vscode远程调试c++
0.背景 最近在学习linux webserver开发,需要在linux下调试自己的C/C++代码,但是linux下不像在windows下,直接Visio Studio或者其它集成开发环境那么方便,现 ...
随机推荐
- LeetCode1239串联字符串的最大长度
题目 给定一个字符串数组 arr,字符串 s 是将 arr 某一子序列字符串连接所得的字符串,如果 s 中的每一个字符都只出现过一次,那么它就是一个可行解. 请返回所有可行解 s 中最长长度. 解题 ...
- 1080 - Binary Simulation
1080 - Binary Simulation PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 64 ...
- centos 各版本下载
地址: go to http://vault.centos.org/ for packages.
- CS5210完全替代AG6202|HDMI转VGA不带音频输出的芯片+原理图|替代兼容AG6202
CS5210完全替代AG6202|HDMI转VGA不带音频输出的芯片+原理图|替代兼容AG6202 安格AG6202是一个HDMI转VGA不带音频解决方案,用于实现HDMI1.4高分辨率视频转VGA转 ...
- <数据结构>图的最小生成树
目录 最小生成树问题 Prim算法:点贪心 基本思想:类Dijstra 伪代码 代码实现 复杂度分析:O(VlogV + E) kruskal算法:边贪心 基本思想: 充分利用MST性质 伪代码 代码 ...
- C语言string操作
创建方式 字符数组:空间已定 字符指针:未分配空间 初始化 字符数组: 创建与赋值必须在同一行 指定大小:未填满部分用'\0'填充 用字符串初始化:末尾自动添加'\0' 不初始化赋值则乱值 字符指针: ...
- HAproxy开启日志记录
1.说明 HAproxy在默认情况不会记录日志, 不仅要在haproxy.conf中配置日志输出, 还需要修改系统日志的配置文件. 2.修改haproxy.conf 在haproxy.conf文件中增 ...
- Java支持IPv6研究
1.Java对IPv6的支持 相对其他开发语言而言,Java对IPv6的支持是比较透明的, 如果全部采用域名(主机名)的方式进行通信,那么基本不需要修改也无需编译原来的代码就可以直接在IPv6上运行. ...
- Swoole 中使用 Table 内存表实现进程间共享数据
背景 在多进程模式下进程之间的内存是相互隔离的,在一个工作进程中的全局变量和超全局变量,在另一个工作进程中是无法读取和操作的. 如果只有一个工作进程,则不存在进程隔离问题,可以使用全局变量和超全局变量 ...
- Hadoop 之 高可用不自动切换(ssh密钥无效 Caused by: com.jcraft.jsch.JSchException: invalid privatekey )
案例 在安装hadoop ha之后,验证HDFS高可用时,怎么都不能实现自动切换.查看zkfc日志发现错误信息如下: WARN org.apache.hadoop.ha.SshFenceByTcpPo ...