SpringBoot读取配置数据的几种方式

786 阅读2分钟
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();
        }
    }
 
}

针对以上四种配置数据加载方式的比较与实际应用,我们在生产中最为常用的是第一种方式,但是最终怎么选用可根据你的实际项目配置加载方式而定