@ConfigurationProperties
是springboot中的注解,用于加载配置文件中的配置字段信息,包括
.properties,.yaml, 或者 .yml
格式中的配置
1 2 3 4 5 6 7 8
| @Configuration @ConfigurationProperties(prefix = "myapp") public class MyAppProperties { private String name; private String version; }
|
上述示例中,@ConfigurationProperties
注解将以 myapp
前缀开头的属性映射到 MyAppProperties
类的字段中,
注意: @ConfigurationProperties
需要搭配@Configuration
或者@Component
等注解使用
或使用 : @EnableConfigurationProperties
指定文件(此时MyAppProperties
中可以不添加@Configuration
或者@Component
等注解)
1 2 3 4 5 6 7 8
| @Configuration @EnableConfigurationProperties(MyAppProperties.class) public class MyAppProperties { private String name; private String version; }
|
@PropertySources
是spring中的注解,用于指定一个或多个属性文件源,与@PropertySource
类似,@PropertySource
只是加载单个属性文件源,
注意:@PropertySources
通常需要搭配@Value
或者@ConfigurationProperties
一起使用来完成属性的注入
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| @Configuration @PropertySources( { @PropertySource(value="classpath:test.properties",encoding="UTF-8") } ) public class ConfigerTest {
@Value("${testName}") private String testName;
public String getTestName() { return testName; } public void setTestName(String testName) { this.testName = testName; } }
|
上述示例中,@PropertySources
注解将会在类目录下加载test.properties
配置文件中以 testName
前缀开头的属性映射到 ConfigerTest
类的testName
字段中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| @Configuration @PropertySources( { @PropertySource(value="classpath:test.properties",encoding="UTF-8") } ) @ConfigurationProperties("test") public class ConfigerTest {
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; } }
|
上述示例中,@PropertySources
注解将会在类目录下加载test.properties
配置文件中以 test.name
的属性映射到 ConfigerTest
类的name字段中
@PropertySource
同上
@Value
@Value
属于spring
的注解,在spring-beans
包下,可以在 字段 或 方法参数 或 构造函数参数 上使用,通常用于属性注入。支持SpEL
(Spring Expression Language)表达式来注入值,同时也支持属性占位符注入值
@Value
注解通常与@Component
、@Service
、@Controller
等注解一起使用,以标记需要注入属性的bean
例子:
配置文件 application.properties
1 2 3 4 5 6 7
| name=test String test=${random.value} test1=${random.int(10)} test2=${test1}ggggg spring.profiles.active=dev age=16 debug=true
|
通过@Value
获取配置文件中的属性值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| @RestController public class ControllerTest {
@Value("${name}") private String name; @Value("${test}") private String test; @Value("${test1}") private String test1; @Value("${test2}") private String test2; @Value("${age}") private int age;
@GetMapping("/") public Map testMethod(){ Map dataMap = new HashMap(); dataMap.put("name",name); dataMap.put("test",test); dataMap.put("test1",test1); dataMap.put("test2",test2); dataMap.put("age",age); return dataMap; }
}
|
直接赋值
1 2 3 4 5 6 7 8 9 10 11
| @Configuration public class MyConfig {
@Value("张三") private String name; public String getName() { return name; }
}
|
方法注入
1 2 3 4 5 6 7 8 9 10 11
| @Configuration public class MyConfig {
@Bean public Student getName(@Value("${spring.application.name}")String name) { Student student = new Student(); student.setName(name); return student; }
}
|
默认值
1 2 3 4 5 6 7 8 9 10 11
| @Configuration public class MyConfig {
@Value("${name}:张三") private String name; public String getName() { return name; }
}
|