方式一: 咱們經過@Value("${spring.datasource.url}")
這樣的方式讀取PropertyPlaceholderConfigurer.properties配置數據集合,本種方式是能夠適應各類應用場景,推薦使用本方式讀取配置文件spring
@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擴展字段會無效,因此若是隻是單純的讀取配置而不須要額外操做時可以使用這方式最簡單bash
@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對象屬性,與方式一的本質差很少,咱們不須要編寫對應字段的模型對象,可是對於程序可閱讀性很差友,複用率不高app
@Component
public class DbConfig {
@Autowired
private Environment environment;
public String getDatabase() {
return environment.getProperty("spring.datasource.database");
}
}
複製代碼
方式四: 經過系統啓動時候初始化Listener,使用PropertiesLoaderUtils工具類讀取指定配置文件並得到Properties配置對象,咱們能夠隨時隨地使用該對象的屬性,這種方式比較少用,針對比較自定義的配置數據可以使用該方式ide
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();
}
}
}
複製代碼
針對以上四種配置數據加載方式的比較與實際應用,咱們在生產中最爲經常使用的是第一種方式,可是最終怎麼選用可根據你的實際項目配置加載方式而定工具