java——获取不到配置文件中的全局变量

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/whm18322394724/article/details/83625302

*发现问题

   前几天在重构过程中移植之前的代码遇到了这样的问题:获取不到配置文件中的全局变量,也就是文章的标题,但是由于我还是小菜所以并没有一开始就意识到bug的根本原因,下面我就简单说说我是如何发现的。
1、直接启动500
2、关键代码行打断点
   刚开始小菜只是发现代码移植过来直接启动报500,日志就提示几行异常代码也知道是空指针,为了准确定位错误,于是乎就惯性的把断点打在了接口中的关键代码行上(如:service、返回值、捕捉异常),开始调试发现就走了一个断点,然后就卡住了,页面也没反应,也不提示错误信息,更别说进service了。调试关键代码行失败。
3、每行代码打断点
   不服气的我把接口里的每行代码都打了断点又试了几次,终于有了新发现:断点走到实例化A实体时就卡着不动了,可是还是没有错误信息。
4、提示错误信息
   有了新发现哪能就此放弃,再次尝试突然报了日志信息,提示基类实体中第18行有错。小菜顺着日志信息点进去发现基类实体中的属性报空指针了,然后就全文检索此属性的值所在地,发现属性的值是个常量写在了配置文件中,此时才开始顺应着“获取不到配置文件中的全局变量”来解决问题,如何解决的请看下文。

在这里插入图片描述

*解决问题

1、使用classpath加载配置文件
   因为基类实体是公用的,不能说改就改,只能先最大程度上解决基类实体获取不到值的问题,否则其他接口中实例化子类实体都有问题,所以就检查了一下web.xml、spring-context.xml等文件中是否使用classpath加载了此配置文件。
   此方法无效,还是获取不到值。
<bean id="propertyConfigurer"
		  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:jdbc.properties</value>
				<value>classpath:inter.properties</value>
			</list>
		</property>
</bean>

2、使用@Value注解直接获取配置文件中的值

  加载配置文件解决不了问题,于是我们就尝试了写死值和使用spring注解,最后选择了后者,在set方法上使用了@Value注解

//在实体的set方法上方使用:@Value("${要获取的全局变量}")
@Value("${PLATFORMMJ}")
public void setPlatform_type(Integer platform_type) {
	this.platform_type = platform_type;
}
//在service直接获取配置文件中的全局变量:@Value("${要获取的全局变量}")
 @Value("${Active}")
 private String icUrl;

猜你喜欢

转载自blog.csdn.net/whm18322394724/article/details/83625302