最近心血来潮在学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;
}

因为是配置类所以我将数据都设置为了静态数据,但问题也是由静态数据引起的。

解决方法 链接到标题

SpringBean 注入配置数据的时候只会调用普通的 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插件 链接到标题

img1

2. 配置部署环境 链接到标题

img2

img3

img4

  • 先给本次部署取一个名字

  • 选择被部署文件的生成方式

IDEA提高了三种方式:Maven BuildUpload FileGradle Build,如果项目里有多模块的话推荐选择 Upload File,然后需要手动通过 maven 插件手动打包并填写路径,否则选 Maven Build 就可以一条龙完成打包+部署了。

  • 选择目标服务器

img5

如果之前没有设置过则需要设置一下

img6

这个设置和其他需要配置 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

img7

img8

  • Before launch

这个部分我们按它的默认设置即可。

这样配置好后我们就可以 一键打包+上传+重启进程 了。