方式一: 咱们经过@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();
}
}
}
复制代码
针对以上四种配置数据加载方式的比较与实际应用,咱们在生产中最为经常使用的是第一种方式,可是最终怎么选用可根据你的实际项目配置加载方式而定工具