SpringBoot讀取配置資料的幾種方式

weixin_33670713發表於2018-12-04
SpringBoot讀取配置資料的幾種方式

方式一: 我們通過@Value("${spring.datasource.url}")這樣的方式讀取PropertyPlaceholderConfigurer.properties配置資料集合,本種方式是可以適應各種應用場景,推薦使用本方式讀取配置檔案

@Component
public class DbConfig {
 
    @Value("${spring.datasource.database}")
    private String database;
    @Value("${spring.datasource.url}")
    private String url;
    @Value("${spring.datasource.username}")
    private String username;
    @Value("${spring.datasource.password}")
    private String password;
    @Value("${spring.datasource.driverClassName}")
    private String driverClassName;
 
    public String getDatabase() {
        return database;
    }
 
    public void setDatabase(String database) {
        this.database = database;
    }
 
    public String getUrl() {
        return url;
    }
 
    public void setUrl(String url) {
        this.url = url;
    }
 
    public String getUsername() {
        return username;
    }
 
    public void setUsername(String username) {
        this.username = username;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    public String getDriverClassName() {
        return driverClassName;
    }
 
    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

 
}

方式二:這種寫法系統會依據prefix字首自動注入配置資料到資料實體變數,這種方式不錯,但是存在缺陷,我們編寫的PropertyPlaceholderConfigurer擴充套件欄位會無效,所以如果只是單純的讀取配置而不需要額外操作時可使用這方式最簡單

@Component
@ConfigurationProperties(prefix = "spring.datasource")
public class DbConfig {
 
    private String database;
    private String url;
    private String username;
    private String password;
    private String driverClassName;
   
 
    public String getDatabase() {
        return database;
    }
 
    public void setDatabase(String database) {
        this.database = database;
    }
 
    public String getUrl() {
        return url;
    }
 
    public void setUrl(String url) {
        this.url = url;
    }
 
    public String getUsername() {
        return username;
    }
 
    public void setUsername(String username) {
        this.username = username;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    public String getDriverClassName() {
        return driverClassName;
    }
 
    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }
 
}

方式三: 我們可以直接注入Environment物件示例並讀取properties物件屬性,與方式一的本質差不多,我們不需要編寫對應欄位的模型物件,但是對於程式可閱讀性不好友,複用率不高

@Component
public class DbConfig {
 
    @Autowired
    private Environment environment;
 
    public String getDatabase() {
        return environment.getProperty("spring.datasource.database");
    }
 
}

方式四: 通過系統啟動時候初始化Listener,使用PropertiesLoaderUtils工具類讀取指定配置檔案並獲得Properties配置物件,我們可以隨時隨地使用該物件的屬性,這種方式比較少用,針對比較自定義的配置資料可使用該方式

public class PropertiesListener implements ApplicationListener<ApplicationStartedEvent> {
 
    @Override
    public void onApplicationEvent(ApplicationStartedEvent event) {
        try {
            Properties properties = PropertiesLoaderUtils.loadAllProperties("classpath:application.properties");
            System.out.println(properties);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
}

針對以上四種配置資料載入方式的比較與實際應用,我們在生產中最為常用的是第一種方式,但是最終怎麼選用可根據你的實際專案配置載入方式而定

相關文章