SpingBoot读取全局以及外部配置的6种方式

SpingBoot读取全局以及外部配置的6种方式

前面三种是读取全局配置文件,后边三个是读取外部配置文件。

全局配置文件:application.yml

自定义外部配置文件:wang.properties

自定义外部配置文件:wang.yml

1.@Value注解方式(最简单的方式、逐个绑定)

使用方法:使用@Value注解加在成员变量属性上,指定读取的key和value。

配置文件:全局配置文件

 //配置文件:application.yml
 wang:
   name: 值
   id: 值

java示例:

 @SpringBootTest
 @Slf4j
 class ValueTests {
 ​
     @value("${wang.name")//1.读取配置,不存在会报错
     //@value("${wang.name:defaultVlue")//2.给一个默认值,增加容错率
     //@value("${wang.name:")//3.只加冒号会给一个空值,增加容错率
     private String name;
         
     @Test
     public void var1Test() {
     log.info("value配置获取{}",name) ;
     }
 }

注意事项:

 注意事项:
 1.所在的这个类,要是一个Bean,否则不生效。
 2.读取的这个配置要在配置文件中要有,否则启动会报错。
 防止出错,增加容错率,加一个默认值,或者只加冒号会赋一个空值。
 3.如果是statis、final也无法生效。
     @value("${wang.name")//1.读取配置,不存在会报错
     private statis String name;
     private final String name;
 4.@Value只能一个一个赋值。如果成员属性很多,就要写很多个@Value进行逐一赋值。

2.@ConfigurationProperties 配置文件绑定方式(批量绑定)

使用方法:通过这个注解,绑定配置文件中某一个key的前缀,这个wang下边的子集就会自动绑定到这个类中的属性成员变量中。

配置文件:全局配置文件

 //配置文件:application.yml
 wang:
   name: 值
   id: 值

java示例:

 @Slf4j
 @Data
 @ConfigurationProperties(prefix = "wang")//通过这个注解,绑定配置文件中某一个key的前缀,这个wang下边的子集就会自动绑定到这个类中的属性成员变量中。
 @SpringBootTest
 public class ConfigurationPropertiesTest {
     private string name;
     private string id;
     @Test
     public void var1Test() { 
         log.info("PropertySource 配置获取{}",name); 
     }
 }
 ​

3. 使用Environment(代码中动态获取配置)

注释:

Environment 是springboot核心的环境配置接口,它提供了简单的方法来访问应用程度属性, 包括系统属性、操作系统环境变量、命令行参数、和应用程序配置文件中定义的属性等等。

使用方法:参考java示例1、java示例2

配置文件:全局配置文件

 //配置文件:application.yml
 wang:
   name: 值
   id: 值
   beanClass:  //动态控制一个Bean是否生效
   isEnabed:   //动态控制一个Bean是否生效

java示例1:

实现EnvironmentAware接口,重写setEnvironment进行赋值。(耦合性低,一般使用这个不使用示例2)

 @SpringBootTest
 @Slf4j
 class EnvironmentTests implements EnvironmentAware {
     
     private Environment env;
     
     @Test
     public void var1Test(){
         String var1 = env.getProperty ("wang.name");
         log.info( "Environment配置获取{}",var1);
     }           
                  
     @Override
     public void setEnvironment(Environment environment){
         this.env=environment;
     }
 }

java示例2:

Environment 也是一个Bean可以通过自动装配的方式引用进来,增加@Resource注解自动装配。

通过env.getProperty()获取value。

 @SpringBootTest
 @Slf4j
 class EnvironmentTests {
     @Resource
     private Environment env;
     
     @Test
     public void var1Test(){
         String var1 = env.getProperty ("wang.name");
         log.info( "Environment配置获取{}",var1);
     }           
              
 }

4.@PropertySources()注解(指定外部配置文件的类路径)

使用方法:在类上使用@PropertySources()注解指定外部配置文件的类路径。

配置文件:wang.properties

wangzi.name=王子

java示例:

 @Data
 @configuration
 @PropertySources({
         @PropertySource(value = "classpath:wang.properties",encoding = "utf-8")
 })
 public class PropertySourcesConf {
     
     @valu( "${wangzi.name}")
     private string name ;
 }

注意事项:

 该方法只能获取.properties后缀的文件配置。
 如果需要读取yml文件的话,看方法五。

5.定义一个配置类PropertySourcesPlaceholderConfigurer(读取yml后缀外部配置文件)

使用方法: 定义一个配置类,配置一个PropertySourcesPlaceholderConfigurer的Bean,实例化一个YamlPropertiesFactoryBean把yaml对象,设置到PropertySourcesPlaceholderConfigurer中。

配置文件:wang.yml

 file:
   type: yml外部文件

java示例:

 /**
  * @Author: WANGZI
  * @Date: 2023/9/25 0:41:43
  */
 @Configuration
 public class MyYamlConfig {
     @Bean
     public static PropertySourcesPlaceholderConfigurer yamlConfigurer(){
         PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
         YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
         yaml.setResources(new ClassPathResource("wang.yml"));
         configurer.setProperties(Objects.requireNonNull(yaml.getObject()));
         return configurer;
     }
 }

通过配置类之后,就可以使用@Value方式去获取一个外部的yaml文件了

 /**
  * @Author: WANGZI
  * @Date: 2023/9/25 0:43:41
  */
 @SpringBootTest
 @Slf4j
 class YamlTests {
   
     @Value("${file.type}")
     private string type ;
            
     @Test
     public void varlTest() { 
         log.info("外部yaml配置获取{}",type); 
     }
 }

6.java原生的方式:输入流InputStreamReader(外部配置文件)

使用方法:直接是用输入流的方式,将流读取到Properties对象中,通过properties.getProperty("zhouyu. name")获取到一个外部的properties文件。

配置文件:wang.properties

 wangzi.name=王子

java示例:

 @Slf4j
 @SpringBootTest
 public class CustomTest {
     @Test
     public void  customTest() {
         Properties properties = new Properties();
         InputStreamReader inputStreamReader = new InputStreamReader(
                 this.getClass().getClassLoader().getResourceAsStream("wang.properties"),
                 StandardCharsets.UTF_8);
         try {
             properties.load(inputStreamReader);
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
         System.out.println("Properties Name: " + properties.getProperty("wangzi. name"));
     }
 }
 ​
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值