公司用的spring boot 1.5.6 版本,mybatis ,然后自己写了mybatis plugin,在 plugin下面,取工程的全局静态变量时,在eclipse 或 idea下,竟然变为null
@Component public class SpringContextAware implements ApplicationContextAware { private static ApplicationContext applicationContext; public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringContextAware.applicationContext = applicationContext; } public static ApplicationContext getApplicationContext() { return applicationContext; } public static <T> T getBean(String name){ return (T) applicationContext.getBean(name); } }
在代码上加了
@Component public class SpringContextAware implements ApplicationContextAware { private static ApplicationContext applicationContext; public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringContextAware.applicationContext = applicationContext; } static { System.out.println("初始化"); } public static ApplicationContext getApplicationContext() { return applicationContext; } public static <T> T getBean(String name){ return (T) applicationContext.getBean(name); } }
发现全局静态变量竟然调用了两次初始化
为了解决这个问题,我花了几天时间,感觉 这是spring boot的问题,在tomcat下跑是没有问题的。
升级到spring boot2.0可以解决这个问题。
最后找到问题所在,是spring-boot-devtools这个包的问题,去掉就可以了。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>