开发平台:IntelliJ IDEA 2019.2 x64企业版
框架:Spring Boot 2.0.6.RELEASE
JDK:1.8
项目结构:
我测试用的是application-test.properties这个文件,因为项目启动时不会自动加载这个文件,所以在启动类里手动加上,代码如下:
@PropertySource(value = "classpath:application-test.properties")// 手动加载文件
@SpringBootApplication
public class TestApplication {
private static final Logger logger = LoggerFactory.getLogger(TestApplication.class);
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
logger.info("========== 测试项目启动成功 ========");
}
}
测试的文件中内容为:
jason.test.date=2019-10-06
jason.test.address=shanghai哈哈哈
jason.test.person=chengHoll.wang
jason.test.do-what= play games
email.ip=172.0.0.1
email.account=1320194169@qq.com
email.password=123456
test-platform=qq
项目启动时会加载这个文件,把里面的内容以key-value的形式存进map中。
读取properties文件中值方法很多,这里主要介绍通过注解的方式获取的。
方式一:通过注解@ConfigurationProperties
代码:
@ConfigurationProperties(prefix = "jason.test")
@Component
public class PropertiesValue {
private String date;
private String address;
private String person;
private String doWhat;
//省略get/set方法,get/set方法是必须有的
}
此注解会自动读取配置文件中以jason.test开头的变量名,也就是key。后面的内容(如:date,address,person,do-what)会自动按照驼峰规则去匹配我们类里面的成员变量。do-what对应daWhat。注意:@Component不能少了。
使用如下:
@RestController
@RequestMapping("/properties")
public class PropertiesController {
@Autowired
private PropertiesValue propertiesValue;
@RequestMapping("/test1")
public String test1(){
return propertiesValue.toString();
}
}
浏览器输出:
方式二:通过注解@Value
此注解比较简单,代码如下:
@Component
public class PropertiesValueNoPrefix {
@Value("${email.ip}")
private String ip;
@Value("${email.account}")
private String account;
@Value("${email.password}")
private String password;
@Value("${test-platform}")
private String platform;
// 省略get/set方法,这里get/set方法可以没有,我这里是为了在别的地方可以调用成员变量
}
使用如下:
@RestController
@RequestMapping("/properties")
public class PropertiesController {
@Autowired
private PropertiesValueNoPrefix propertiesValueNoPrefix;
@RequestMapping("/test2")
public String test2() {
return propertiesValueNoPrefix.toString();
}
}
浏览器输出:
也可以直接在需要使用的地方通过这个注解获取值,如下:
@RestController
@RequestMapping("/properties")
public class PropertiesController {
@Value("${email.ip}")
private String ip;
@Value("${email.account}")
private String account;
@Value("${email.password}")
private String password;
@Value("${test-platform}")
private String platform;
@RequestMapping("/test3")
public String test3() {
return ip + " " + account + " " + password + " " + platform;
}
}
浏览器输出:
注意:有些情况需要我们采用默认配置值
例如配置文件:
jason.test.date=2019-10-06
jason.test.address=shanghai哈哈哈
jason.test.person=chengHoll.wang
jason.test.do-what=what to do
java代码:
@ConfigurationProperties(prefix = "jason.test")
@Component
public class PropertiesValue {
private String date;
private String address;
private String person;
private String doWhat = "play games";
//省略get/set方法,get/set方法是必须有的
}
这个时候如果配置文件中没有jason.test.do-what这个配置,则doWhat的值就是"play games",如果有这个配置项,则doWhat的值就是"what to do"。同样还有下面这种方式:
配置文件:
test.count=10
java代码:
@RestController
@RequestMapping("/properties")
public class PropertiesController {
@Value("${test.count:200}")
private String count;
@RequestMapping("/count")
public String test4() {
return count;
}
}
如果配置文件中没有test.count这个配置项,则count的值是200,如果有的话,count的值就是配置的值:10