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

2022-06-25 08:29:55

配置文件

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

@Value

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

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

ConfigurationProperties

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

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

@PropertySource

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

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

@Component@ConfigurationProperties(prefix="spring.datasource")@PropertySource(value={"classpath:datasource.properties"}, ignoreResourceNotFound=false)publicclassDatasourceEntity{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)publicclassDataSource{@Bean(name="getDataSource")@Conditional(DataSourceConditional.class)public StringgetDataSource(@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;publicclassDataSourceConditionalimplementsCondition{@Overridepublicbooleanmatches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata){// 取出环境配置
        Environment env= conditionContext.getEnvironment();// 判断读取的配置是否存在// 若dataSource存在 -> 返回true -> Bean注入成功。反之,失败。return env.containsProperty("dataSource");}}

验证

@SpringBootApplicationpublicclassStudyApplication{publicstaticvoidmain(String[] args){
        SpringApplication.run(StudyApplication.class, args);

        AnnotationConfigApplicationContext ac=newAnnotationConfigApplicationContext(AppConfig.class);
        String dataSource=(String) ac.getBean("getDataSource");
        System.out.println(dataSource);}}
  • 作者:wifiiiiiiii
  • 原文链接:https://blog.csdn.net/weixin_41915314/article/details/107675769
    更新时间:2022-06-25 08:29:55