Spring Boot学习 之 关于读取配置文件的方法

导读:本篇文章讲解 Spring Boot学习 之 关于读取配置文件的方法,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

配置文件

spring.datasource.url=jdbc:p6spy:h2:mem:testdb
spring.datasource.username=sa

@Value

@Value注解,使用 ${…} 占位符读取配置在属性文件的内容。@Value,既可以加载属性,也可以加在方法上。

@Component
public class DatasourceEntity {
    @Value("${spring.datasource.url}")
    private String url;

    @Value(("${spring.datasource.username}"))
    private String username;
}

ConfigurationProperties

@ConfigurationProperties 将与POJO的属性名称组成属性的全称去配置文件里查找,这样就能将对应的属性读入到POJO中。

@Component
@ConfigurationProperties(prefix = "spring.datasource")
public class DatasourceEntity {
    private String url;
    private String username;
}

@PropertySource

当我们为了更好地管理配置文件,区分出多个配置文件后。可以使用 @PropertySource 去定义对应的属性文件,把它加载到Spring的上下文中。

ignoreResourceNotFound:是否忽略配置文件找不到的问题,默认值为:false,即:找不到配置文件,则报错。为:true,即:找不到就自动忽略掉,不会报错。

@Component
@ConfigurationProperties(prefix = "spring.datasource")
@PropertySource(value = {"classpath:datasource.properties"}, ignoreResourceNotFound = false)
public class DatasourceEntity {
    private String url;
    private String username;
}

@Conditional

根据条件判断来决定是否装配Bean到容器中,需与 Condition(org.springframework.context.annotation.Condition) 配合使用

application.properties

dataSource=mysql

DataSource.java

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Configuration
@PropertySource(value = {"classpath:application.properties"}, ignoreResourceNotFound = false)
public class DataSource {

    @Bean(name = "getDataSource")
    @Conditional(DataSourceConditional.class)
    public String getDataSource(@Value("${dataSource}") String dataSource) {
        return dataSource;
    }
}

DataSourceConditional.java

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;

public class DataSourceConditional implements Condition {

    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        // 取出环境配置
        Environment env = conditionContext.getEnvironment();
        // 判断读取的配置是否存在
        // 若dataSource存在 -> 返回true -> Bean注入成功。反之,失败。
        return env.containsProperty("dataSource");
    }
}

验证

@SpringBootApplication
public class StudyApplication {
    public static void main(String[] args) {
        SpringApplication.run(StudyApplication.class, args);

        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
        String dataSource = (String) ac.getBean("getDataSource");
        System.out.println(dataSource);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/77909.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!