配置项分系统默认和自定义、首先来看一下系统默认的配置文件,如图:
application.properties
是默认的配置文件;来看看几种使用方式:
- 直接引用配置文件中的value
首先配置文件中定义key=value;
username=123
password=321
创建类
public class DemoConfiguration {
private String username;
private String password;
}
将配置文件中的value赋值给username和password;
@Component
public class DemoConfiguration {
@Value("${username}")
private String username;
@Value("${password}")
private String password;
}
修改此前的rest接口,预期结果为浏览器中打印properties文件中配置的 username :123, password:321
,来看看是否成功
@Autowired
private DemoConfiguration demoConfiguration;
@RequestMapping("getString")
public String getResultAsString() {
String username = demoConfiguration.getUsername();
String password = demoConfiguration.getPassword();
return String.format("properties文件中配置的 username :%s, password:%s", username, password);
}
- 通过前缀自动配置属性值
比如:配置文件如下
book.name=bookName
book.author=bookAuthor
定义Book类,通过自定加载的特性来自动注入配置文件中的Value
@Component
@ConfigurationProperties(prefix = "book")
public class Book {
private String name;
private String author;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
定义rest接口:
@Autowired
private Book book;
@RequestMapping("getBook")
public Book getBook() {
return book;
}
在浏览器中输入localhost:8080/getBook,预期结果为输出{"name":"bookName","author":"bookAuthor"}
配置文件中如果配置book.name;实体类中@ConfigurationProperties(prefix = "book"),即配置中key=prefix + 实体类中的field的名称
@ConfigurationProperties标识系统自动从配置文件中加载对应的属性值
- 自定义配置文件;
通常为了让代码结构化更清晰,会将配置分类,仅适用一个spring默认的文件肯定是不够的;来看看如何配置自定义的properties文件吧!但是在spring boot(版本1.5.1.RELEASE)以前,原本通过@ConfigurationProperties中的locations可以定义配置文件
,但是在1.5.1之后官方就将此属性移除了;
首先创建properties文件 redis.properties:
redis.url=192.168.0.1
redis.port=9000
定义实体类RedisConfiguration
@Component
@ConfigurationProperties(prefix = "redis")
@PropertySource("classpath:/redis.properties")
public class RedisConfiguration {
private String url;
private String port;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
}
定义getRedis
接口
@Autowired
private RedisConfiguration redisConfiguration;
@RequestMapping("getRedis")
public String getRedis() {
String url = redisConfiguration.getUrl();
String port = redisConfiguration.getPort();
return String.format("redis配置文件中 url:%s, port:%s", url, port);
}
在浏览器中输入localhost:8080/getRedis
1、特别注意的,经过测试,在自定义的配置文件中出现的key,不能在默认的application.properties文件中出现,否则会优先取application.properties文件中的Value
2、@PropertySource("classpath:/redis.properties")中的文件不能出错,默认会忽略resources的目录
3、@Component注释必须添加,否则无法被spring初始化;