Spring @Value 获取不到值

开发中有时候会遇到程序中需要一些参数或者url地址的情况,一般情况下在Spring框架中我们会将这些信息配置在properties文件中,以便进行维护。

今天遇到一个问题,同一个redis.properties中的两个属性,一个可以通过@Value注解正常获取到,而另一个死活获取不到。上网搜了解决方法,问题得到了解决。

在以下配置中加入:

<context:property-placeholder location="classpath:config.properties"  ignore-unresolvable="true"  />
	<context:property-placeholder location="classpath:redis.properties"  ignore-unresolvable="true" />

其中如果之前两个配置文件中间使用的是逗号隔开的方式,那么最好也修改成这种方式,并且以下配置是必须的:ignore-unresolvable="true" 

虽然问题解决了,但是在解决问题之前,同一个配置文件只有一部分数据可以读取的到的问题还没有明白,准备有时间好好研究一下。

未完待续。。。

在 Java 单元测试中使用@Value 注解获取不到,可参考以下解决办法: - 确保注解不作用于 `static final` 修饰的属性,因`@Value`注解不能作用于`static final`修饰的属性,若使用了此类修饰,需去除`static final`修饰符,让注解能正常注入 [^3]。 - 保证类为注册类,`@Value`注解不能作用于非注册类,需使用`@Component`及其衍生注解(如`@Service`、`@Repository`、`@Controller`等)标注类,使类被 Spring 容器管理,这样注解才能生效 [^3]。 - 采用依赖注入方式使用类,类的使用只能通过依赖注入的方式,不能用`new`的方式创建对象,因为`new`出来的对象不在 Spring 容器管理范围内,无法实现依赖注入,需使用`@Autowired`等方式进行依赖注入 [^3]。 - 确保被调用类也由 Spring 管理,若有注入 bean 的类被其他类作为对象引用,这个被调用的类也必须选择注解的方式注入到调用它的类中,不能用`new`出来做对象,需使用`@Service`等注解将其交给 Spring 管理,让其默认注入 [^4]。 ```java import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service public class MyService { // 正确使用,非 static final 修饰 @Value("${my.property}") private String myProperty; public String getMyProperty() { return myProperty; } } ``` ```java import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest public class MyServiceTest { @Autowired private MyService myService; @Test public void testGetValue() { System.out.println(myService.getMyProperty()); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值