@ConfigurationProperties實現配置注入到實體類


有時候有這樣子的情景,我們想把配置文件的信息,讀取並自動封裝成實體類,這樣子,我們在代碼里面使用就輕松方便多了,這時候,我們就可以使用@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
    }
 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM