最近心血来潮在学SpringBoot,想用Spring+SpringMVC+MyBatis-plus这样一套框架来快速开发,但在学习过程中遇到了一些坑。
单元测试时报空指针异常 链接到标题
java.lang.NullPointerException
是我们喜闻乐见的一种报错了,但我跟着黑马的视频一步步写也能报这个错就不正常了。
解决方法 链接到标题
在 @SpringBootTest
注解前面加一个 @RunWith(SpringJUnit4ClassRunner.class)
注解,括号里也可以是 SpringRunner.class
,如果想用 JUnit 来进行测试的话还是选择第一个吧。
当然如果选择的是 JUnit 5 的话就不会遇到这个问题了,因为 @SpringBootTest
注解里已经整合了等效的 @ExtendWith( SpringExtension.class)
注解。
无法读取 application 内的配置数据问题 链接到标题
这个问题发生在我试图用一个 config 类来封装开发微信小程序后端所需的配置数据,但在读取时遇到了问题。
@Component
@ConfigurationProperties("wechat")
public class WechatConfig {
private static String appId;
private static String appSecret;
}
因为是配置类所以我将数据都设置为了静态数据,但问题也是由静态数据引起的。
解决方法 链接到标题
Spring 给 Bean 注入配置数据的时候只会调用普通的 setter, 而且这个 setter 必须得在这个 Bean 内部的,所以用 lombok
的 @Data
注解是没有用的,IDEA 快捷键生成的 setter 也是没有用的,只能自己写一个普通的 setter 然后再生成一个静态的 getter 才能成功读取到配置数据。
@Component
@ConfigurationProperties("wechat")
public class WechatConfig {
private static String appId;
private static String appSecret;
public void setAppId(String appId) {
WechatConfig.appId = appId;
}
public void setAppSecret(String appSecret) {
WechatConfig.appSecret = appSecret;
}
public static String getAppId() {
return appId;
}
public static String getAppSecret() {
return appSecret;
}
}
自动部署配置 链接到标题
1. 安装Alibaba Cloud Toolkit插件 链接到标题
2. 配置部署环境 链接到标题
-
先给本次部署取一个名字
-
选择被部署文件的生成方式
IDEA提高了三种方式:Maven Build,Upload File,Gradle Build,如果项目里有多模块的话推荐选择 Upload File,然后需要手动通过 maven 插件手动打包并填写路径,否则选 Maven Build 就可以一条龙完成打包+部署了。
- 选择目标服务器
如果之前没有设置过则需要设置一下
这个设置和其他需要配置 ssh 管道的类似,这里就省略不写了。
- 填写文件传输的目标目录
这个很容易理解,即希望把 jar 包上传到服务器的哪个目录下。
- 配置 After deploy
这个是用于配制部署结束后需要执行的命令的,我们可以在服务器对应目录下写一个结束进程脚本与一个开启进程脚本,让我们在部署结束后可以自动重启一下进程。
下面是较为简单的两个脚本模板。
# start.sh
nohup java -jar {jar包名称} >/dev/null 2>&1 & echo "服务启动成功"
# stop.sh
PID=$(ps -ef | grep {jar包名称} | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
echo Application is already stopped
else
echo kill -9 $PID
kill -9 $PID
fi
- Before launch
这个部分我们按它的默认设置即可。
这样配置好后我们就可以 一键打包+上传+重启进程 了。