@ConfigurationProperties

是springboot中的注解,用于加载配置文件中的配置字段信息,包括

.properties,.yaml, 或者 .yml 格式中的配置

1
2
3
4
5
6
7
8
@Configuration
@ConfigurationProperties(prefix = "myapp")
public class MyAppProperties {
private String name;
//此处字段上不需要加其他注解,会自动加载配置文件中的 myapp.version信息
private String version;
// getters and setters
}

上述示例中,@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;
//此处字段上不需要加其他注解,会自动加载配置文件中的 myapp.version信息
private String version;
// getters and setters
}

@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;
}

}