@value注解和@ConfigurationProperties注解
@value读取默认配置
yml文件内容如下(装了STS插件以后即可直接使用,改后缀就行了)
user:
username: xiongda
sex: man
age: 20
school:
name: xtu
location: hunan
备注:一定要注意之间要留空格,发现颜色变绿色了才是正确的格式,这个坑我刚踩
package com.example.demo.service.impl;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.example.demo.service.ReadConfigService;
@Service
public class ReadConfigServiceImpl implements ReadConfigService {
@Value(value="${user.username}")
private String username;
@Value(value="${user.sex}")
private String sex;
@Value(value="${user.age}")
private String age;
@Value(value="${school.name}")
private String name;
@Value(value="${school.location}")
private String location;
@Override
public String getUserMessage() {
return "user ="+username+" sex ="+sex+" age="+age;
}
@Override
public String getAuthorMessage() {
return "schoolname="+name+"location="+location;
}
}
@ConfigurationProperties读取默认配置
package com.example.demo.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix="user")
public class HelloConfig {
private String username;
private String sex;
private String age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
调用的controller层
package com.example.demo.web;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.demo.config.HelloConfig;
import com.example.demo.service.ReadConfigService;
@RestController
@RequestMapping("hello")
public class HelloController {
@Autowired
ReadConfigService readConfigService;
@Autowired
HelloConfig helloConfig;
@RequestMapping("/user")
public String say() {
return "username "+helloConfig.getUsername()+" sex "+helloConfig.getSex()+" age "+helloConfig.getAge();
}
@RequestMapping("/school")
public String school() {
return readConfigService.getAuthorMessage();
}
}
@ConfigurationProperties和@Value使用上的一点区别
@ConfigurationProperties和@Value的一个共同点就是从配置文件中读取配置项。
发现有一点区别,我项目配置中并没有配置hello.msg ,当使用第一段代码时,启动后读取到msg为null,而第二段代码则会抛出异常。
第二段代码有个好处,就是防止我们配置项遗漏,当遗漏时,启动程序肯定出错,这样避免了一些因为遗漏配置项导致的BUG.
第一段代码
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties("hello")
public class HelloProperties {
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
第二段代码
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Hello2Properties {
@Value("${hello.msg}")
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。