springboot读取配置文件方法常用有两种方式
- @Value
- @ConfigurationProperties
两种方式获取值的对比
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
防止配文读取乱码
在测试之前我们需要把创建文件的格式都改为UTF-8
application.properties 加入如下配置(这里我试了不加也只要上面设置了也没问题,如果上面设置了还是有乱码就加上这个配置)
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
1.@Value方式获取配置信息
目录结构
新建配置文件 config.properties
teacher.id=123
teacher.name=阿离
po : teacher
@Data
@NoArgsConstructor
@Component
//不使用这个注解默认读取application.properties
@PropertySource(value = "classpath:config.properties")
public class Teacher {
@Value("${teacher.id}")
private Integer id;
@Value("${teacher.name}")
private String name;
}
创建测试类测试
SpringbootTest
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MybatisApplication.class)
public class SpringbootTest {
@Autowired
Teacher teacher;
@Test
public void testTeacher() {
System.out.println(teacher);
}
}
注意:MybatisApplication.class自己要创建 不然会报错
2.@ConfigurationProperties注解读取
配置文件
config.properties 加入如下类容
user.id=666
user.name=奏
user.age=12
user.state=true
user.teacher.id=123
user.teacher.name=阿离
user.list[0]=666
user.list[1]=啦啦啦
## 或者这样 stuedent.list=666,啦啦啦
user.map[id]=101
user.map[name]=张飞哦
## map或者这样读取 student.map.id=101
测试po User
@Data
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "user")
//不使用这个注解默认读取application.yml
@PropertySource(value = "classpath:config.properties")
public class User {
private Integer id;
private String name;
private Integer age;
private Boolean state;
private Teacher teacher;
private List<Object> list;
private Map<Object, String> map;
}
测试中添加测试方法
@Autowired
User user;
@Test
public void testUser(){
System.out.println(user);
}
然后运行测试方法