SpringBoot的@Value注解如何设置默认值
作者:程序新视界
这篇文章主要介绍了SpringBoot的@Value注解如何设置默认值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
@Value注解设置默认值
在Spring Boot中,如果使用@Value注解对属性进行赋值,但如果在配置文件或启动参数中未指定对应的参数值,则会抛出异常。异常信息往往是对应注入属性的类实例化失败。
此时,需要对@Value对应的值进行配置,或设置默认值。
设置方法如下:
@RestController public class ConfigController { // ①未指定默认值 @Value("${user.username}") private String username; // ②指定默认值为“unknown” @Value("${projectName:unknown}") private String projectName; }
针对以上两个@Value的使用,如果username对应的属性值未在application.properties文件中配置或未在java -jar命令中传递参数,那么启动时将抛出异常。
而针对第二种方式,通过“:”指定如果获取不到该参数值时所使用的默认值,则启动时不会出现异常信息。
@Value注解默认值使用及效果测试
使用@Value注解的代码
注意事项:
(1)注解修饰的变量不能是final、static。
(2)使用@Component修饰所在类交给spring管理。
(3)使用时要用@Autowried注入,不能new对象。
(4)${address-config:浙江省杭州市西湖区} address-config为配置文件属性名,如果配置文件没有配则使用默认值,当前默认值为‘浙江省杭州市西湖区’。
注意使用的是${} 而不是 #{}
User.java
package com.oashiro.example.test; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class User{ public String address; @Value("${address-config:浙江省杭州市西湖区}") public void steAddress(String address){ this.address=address; } public String getAddress(){ return this.address; } @Override public String toString() { return "User{" + "address='" + address + '\'' + '}'; } }
Junit测试
UserTest.java
package com.oashiro.example.test; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest class UserTest { @Autowired private User user; @BeforeEach public void setup(){ System.out.println("开始测试1"); } @AfterEach public void teardown(){ System.out.println("测试结束1"); } @Test public void printUser(){ System.out.println(user); //预期结果(浙江省)与实际获取的默认结果(浙江省杭州市西湖区)作对比 assertEquals("浙江省",user.getAddress()); } }
测试结果
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。