在树莓派上开发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或者其它集成开发环境那么方便,现 ...
随机推荐
- 【九度OJ】题目1196:成绩排序 解题报告
[九度OJ]题目1196:成绩排序 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1196 题目描述: 用一维数组存储学号和成绩,然后 ...
- 【LeetCode】81. Search in Rotated Sorted Array II 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/search-in ...
- [opencv]拼接合并轮廓集合mergeContours
/** * 拼接合并轮廓集合 * @param contours * @return */ vector<vector<Point>> mergeContours(vector ...
- tcpdump统计http请求并导出URL文本
tcpdump统计http请求并导出URL文本 tcpdump tcpdump是一个用于截取网络分组,并输出分组内容的工具.凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排 ...
- Pytest_参数化(10)
pytest参数化有两种方式: mark的parametrize标记:@pytest.mark.parametrize(变量名,变量值),其中变量值类型为列表.元组或其它可迭代对象. fixture的 ...
- Selenium_获取浏览器名称和版本(5)
from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get(" ...
- 详谈 Java工厂 ---工厂方法模式
1.前言 有个场景,消费者需要付钱,有可能是使用支付宝.微信.银行卡,那么该怎么选择呢? 是不是想到了使用用if else判断?还是使用switch? 一个地方这样写还好,如果有很多这样的业务,难道都 ...
- tomcat 可部署4种方式
1.在conf\Catalina\localhost 目录下添加.xml配置文件 2.修改server.xml文件进行部署 3.将项目拷贝到webapps目录下 4.启动tomcat后,打开tomca ...
- vue 表格树 固定表头
参考网上黄龙的表格树进行完善,并添加固定表头等的功能,目前是在iview的项目中实现,如果想在element中实现的话修改对应的元素标签及相关写法即可. <!-- @events @on-row ...
- java关于for循环的效率优化
我们知道在实现一个功能的时候是可以使用不同的代码来实现的,那么相应的不同实现方法的性能肯定也是有差别的,所以我们在写一些对性能很敏感的模块的时候,对代码进行优化是很必要的,所以我们说一下for循环(w ...