美文网首页
SpringBoot中yml文件读取笔记

SpringBoot中yml文件读取笔记

作者: 数字d | 来源:发表于2022-03-11 23:17 被阅读0次

    一、.yml文件的读取方式

    在resource文件夹下面创建一个application.yml文件
    内容大概如下,注意port:和8080中间有个空格的,所有的“:”后面都有

    server:
      port: 8080
      servlet:
        session:
          timeout: 30
      tomcat:
        uri-encoding: UTF-8
    age: 19
    name: name out
    info: info out
    personinfo:
      name: name inner
      age: 30
      info: info  inner
    

    1.外层数据读取:

    在test文件夹下面创建PropertTest类文件

    输入以下代码

    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    /**
     * Copyfright(C),2022-2022,复兴元宇科技有限公司
     * FileName:PropertTest
     * Author:yz
     * Date:2022/3/10 1:38 下午
     * Description:
     * History:
     * <author>  <time> <version> <desc>
     * 作者       时间    版本      描述
     */
    @SpringBootTest
    @RunWith(SpringRunner.class)
    public class PropertTest {
        @Value("${age}")
        private int age;
    
        @Value("${name}")
        private String name;
    
        @Value("${info}")
        private String info;
    
        @Test
        public void getAge() {
            System.out.println(age);
        }
        @Test
        public void getName() {
            System.out.println(name);
        }
    
        @Test
        public void getInfo() {
            System.out.println(info);
        }
    
        @Autowired
        private GetPersonInfoProperties getPersonInfoProperties;
        @Test
        public void getGetPersonInfoProperties() {
            System.out.println(getPersonInfoProperties.getName() + " " + getPersonInfoProperties.getAge());
        }
    }
    
    

    使用test运行,测试获取信息

    2.内层数据获取

    scr/main/java文件夹下面创建一个GetPersonInfoProperties类,代码如下:

    package com.example.demo;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @Component
    @ConfigurationProperties(prefix = "personinfo")
        public class GetPersonInfoProperties {
        private int age;
        private String name;
        private String info;
    
        public String getName() {
            return name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public void setName(String name) {
            this.name = name;
        }
        public void setInfo(String info) {
            this.info = info;
        }
    
        public String getInfo() {
            return info;
        }
    
    }
    
    

    3.测试调用

    在程序执行的位置,初始化GetPersonInfoProperties对象,然后调用get方法获取对应属性

       @Autowired
        private GetPersonInfoProperties getPersonInfoProperties;
        @RequestMapping("/innername")
        public String name() {
            return getPersonInfoProperties.getName();
        }
        @RequestMapping("allinfo")
        public String  allinfo() {
            return getPersonInfoProperties.getAge() + " " + getPersonInfoProperties.getName() + " " + getPersonInfoProperties.getInfo();
        }
    

    项目本地运行

    测试结果:
    在浏览器上输入127.0.0.1:8080/allinfo

    数据获取完成~


    二、使用.properties文件的读取方式

    1.常规操作创建allication.properties文件

    com.example.name=${name:name}
    com.example.age=18
    com.example.address[0]="beijing"
    com.example.address[1]="shenzhen"
    com.example.address[2]="haikou"
    

    2.文件处理类配置项

    @Component
    @ConfigurationProperties(prefix="com.example")
    public class CoExample {
            private String name;
            private int age;
            private List<String> address;
    
    }
    

    3.编写测试和文件配置项

    @SpringBootTest
    @RunWith(SpringRunner.class)
    public class COExampleTest {
            @Autowired
            private CoExample coExample;
    
            @Test
            public void getName() {
               System.out.println(coExample.getName());
            }
    
            @Test
            public void getAge() {
               System.out.println(coExample.getAge());
            }
    
           @Test
            public void getAddress() {
               System.out.println(coExample.getAddress());
            }
          
    }
    

    运行和检查测试文件

    三、使用.yml配置多环境

    比如在resource文件中创建三个.yml文件分别是

    application-dev.yml 测试环境
    aoolication-prod.yml 生产环境
    application.yml主配置文件
    

    接下来将每个文件的具体内容编写合理
    application-dev.yml文件内容

    server:
      port: 8080
      servlet:
        session:
          timeout: 30
      tomcat:
        uri-encoding: UTF-8
    myenvironment: 
        name:dev
    

    application-prod.yml文件内容

    server:
      port: 8080
      servlet:
        session:
          timeout: 30
      tomcat:
        uri-encoding: UTF-8
    myenvironment: 
        name:prod
    

    主文件application.yml

    spring:
        profiles:
            active:dev
    

    active这里是dev表示是调试模式,如果发布那么需要修改active的值为prod
    编写测试:

    @RunWith(SpringRunner.class)
    @SprinngBootTest
    public class MutiYmiDemoApplicationTest{
    @Value("${myenvironment.name}")
    private String name;
    @Test
    
    public void getMyEnvironment(){
      System.out.printlnn(name);
    }
    }
    

    运行测试。

    变更环境,如果需要发布项目,那么需要将application.yml中的active:dev改为active:prod

    四、使用.properities配置多环境

    文件

    com.example.name=${name:longtao}
    com.example.age=18
    com.example.address[0]=\u5317\u4EAC
    com.example.address[1]=\u4E0A\u6D77
    com.example.address[2]=\u5E7F\u5DDE
    

    道理和第三种方式一样,就是把配置文件的dev改为prod

    spring.profiles.active=dev
    

    也可以在运行jar包时候指定配置文件

    java -jar name.jar --spring.profile.active=pro
    

    相关文章

      网友评论

          本文标题:SpringBoot中yml文件读取笔记

          本文链接:https://www.haomeiwen.com/subject/kqafdrtx.html