有時候有這樣子的情景,我們想把配置文件的信息,讀取並自動封裝成實體類,這樣子,我們在代碼里面使用就輕松方便多了,這時候,我們就可以使用@ConfigurationProperties,它可以把同類的配置信息自動封裝成實體類
首先在配置文件里面,這些信息是這樣子滴
connection.username=admin
connection.password=kyjufskifas2jsfs
connection.remoteAddress=192.168.1.1
這時候我們可以定義一個實體類在裝載配置文件信息
@Component
@ConfigurationProperties(prefix="connection")
public class ConnectionSettings {
private String username;
private String remoteAddress;
private String password ;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getRemoteAddress() {
return remoteAddress;
}
public void setRemoteAddress(String remoteAddress) {
this.remoteAddress = remoteAddress;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
我們還可以把@ConfigurationProperties還可以直接定義在@bean的注解上,這是bean實體類就不用@Component和@ConfigurationProperties了
@SpringBootApplication
public class DemoApplication{
//...
@Bean
@ConfigurationProperties(prefix = "connection")
public ConnectionSettings connectionSettings(){
return new ConnectionSettings();
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
然后我們需要使用的時候就直接這樣子注入
@RestController
@RequestMapping("/task")
public class TaskController {
@Autowired ConnectionSettings conn;
@RequestMapping(value = {"/",""})
public String hellTask(){
String userName = conn.getUsername();
return "hello task !!";
}
}
如果發現@ConfigurationPropertie不生效,有可能是項目的目錄結構問題,
你可以通過@EnableConfigurationProperties(ConnectionSettings.class)來明確指定需要用哪個實體類來裝載配置信息
@Configuration
@EnableConfigurationProperties(ConnectionSettings.class)
public class MailConfiguration {
@Autowired private MailProperties mailProperties;
@Bean public JavaMailSender javaMailSender() {
// omitted for readability
}
}