在springboot中配置文件注入以及自定义配置文件
配置文件注入说明:
– ${my.name}可以在配置文件中引用前面配置过的属性(优先级前面配置过的这里都能用)。
– ${ my.name : 默认值 }来指定找不到属性时的默认值
使用场景一:
有时候在项目中需要使用一些自定义的键值对属性,而且又不想放入springboot的application.properties的配置属性的文件中.那应该如何引入自定的.properties文件中的属性呢?使用注解@PropertySource可以引入多配置文件
测试使用
在resources下创建data文件夹,在其下创建两个配置文件my.properties和your.properties
my.properties内容
my.name=myName
my.age=1
your.properties内容
your.name=yourName
your.age=2
# 这里不用sex属性,在@Value中使用默认值试试
使用@PropertySource修饰一个实体类
@Component
//value属性是一个数组,可以引入多个配置文件
@PropertySource(value = {"classpath:data/my.properties","classpath:data/your.properties"})
@Data
public class MyProp {
@Value("${my.name:myName的默认值}")
private String myName;
@Value("${my.age:100}")
private Integer myAge;
@Value("${my.address:myAddress默认值}")
private String myAddress;
@Value("${your.name:yourName的默认值}")
private String yourName;
@Value("${your.age:200}")
private Integer yourAge;
@Value("${your.sex:yourSex的默认值}")
private String yourSex;
}
测试使用的Controller
@RestController
public class TestController {
@Autowired
private MyProp myProp;
@RequestMapping("/test01")
public String test03() {
return myProp.toString();
}
}
测试结果
可以看到:*.properties中有值的就覆盖了默认值,没有值的属性就使用了默认值.
使用场景二
需要在配置文件中配置date/list/map/domain等相关的数据,使用@ConfigurationProperties可以满足要求
测试使用
在application.properties中添加属性
student.first-name=${my.name}
student.age=${my.age:100}
# 测试时间 这是默认的格式
student.birth=2019/11/26
# 测试Boolean
student.flag=false
# 测试list 属性名=元素,元素
student.prolist=mybatis,spring,shiro
# 测试map 属性名.key=value
student.promap.k1=value1
student.promap.k2=value2
# 测试实体类 实体类.属性名=值
student.book.bookName=Le Petit Prince
student.book.bookPrice=34
其中用到的Book类
@Data
public class Book {
private String bookName;
private int bookPrice;
}
创建一个config实体类对象来接收属性
@Data
@Component
//可以取出配置文件中的属性,prefix是属性的前缀
@ConfigurationProperties(prefix = "student")
public class MyConfig {
//存在-的可以使用驼峰命名
private String firstName;
private int age;
private Date birth;
private boolean flag;
//名称保持一致
private List<Object> prolist;
private Map<String, Object> promap;
private Book book;
}
测试使用的Controller
@RestController
public class ConfigController {
@Autowired
private MyConfig myConfig;
@RequestMapping("/test02")
public String test02() {
return myConfig.toString();
}
}
测试的结果
属性都取到了,默认值也进行了覆盖