如果在Spring Boot中使用static变量时,可能会出现如下面的异常:
java.lang.ExceptionInInitializerError
这是由于调用某个static变量属性时而该属性没有初始化而导致的错误。
比如在Spring Boot项目中,使用static代码块初始化某些static变量,并且该类没有处于Spring的管理之下,就可能会出现上述错误。
解决方法:实现ApplicationContextInitializer,自定义在Spring启动前加载的代码
具体如下:
- 实现ApplicationContextInitializer类,如下:
/**
* Created by pierre_cai on 2017/9/11.
*/
public class MyStartProcess implements ApplicationContextInitializer {
@Override
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
//在这个方法中定义需要在程序启动之前加载的代码
MyService.startProcess();
}
}
- 在resources文件下创建META-INF/spring.factories文件,项目结构如下:
- 在spring.factories文件中声明上面添加的ApplicationContextInitializer实现类
org.springframework.context.ApplicationContextInitializer=com.test.myTest.MyStartProcess
这样,定义在MyStartProcess类中的方法就会在Spring Boot启动之前加载。避免静态变量在初始化之前就被Spring访问,导致异常。