美文网首页Java
Spring Boot配置文件注入

Spring Boot配置文件注入

作者: Java天天 | 来源:发表于2020-02-26 17:11 被阅读0次

    在Spring Boot中,配置文件是application.yml或者application.properties。

    yml语法

    yml配置文件的语法主要有以下几点:

    key:[space] value

    大小写敏感

    空格(Tab)控制层级关系

    其中value的可以是简单数据类型(数字、字符串),也可以是复杂数据类型(数组、对象、集合、Map等)。

    注意:对于字符串,默认是不需要加双引号或者单引号。

    配置文件注入

    假设配置文件内容如下:

    coder:

      name: smartpig  //简单数据

      lang: [Java,Kotlin] //List

      softwares: {cut: pr,image: ps} //Map

      pet:  //对象

        name: bigdog

        type: dog

    使用@Value获取配置文件中的值

    在控制器中,使用@Value(“${}”)获取配置文件中的值,如下获取了coder中name的值

    @Controller

    public class Hello {

        @Value("${coder.name}")

        private String name;

        @RequestMapping("/hello")

        @ResponseBody

        public String hello(){

            return "hello "+ name;

        }

    }

    使用@ConfigurationProperties(perfix="")和@Compent与配置文件进行映射 编写Pet类,编写Coder类

    @Component

    @ConfigurationProperties(prefix = "coder")

    public class Coder {

        private String name;

        private List<String> lang; //数组

        private Map<String,String> softwares; //Map

        private Pet pet; //对象

        //省略getter/setter/toString

    }

    然后在测试类中进行测试

    @SpringBootTest

    class DemoSpringbootApplicationTests {

        @Autowired

        Coder coder;

        @Test

        void contextLoads() {

            System.out.println(coder.toString());

        }

    }

    输入结果为配置文件中的值

    使用插件使得在yml中编写对应配置有提示效果

    <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-configuration-processor</artifactId>

    </dependency>

    在properties配置文件中进行映射

    如果使用properties配置文件,除了书写格式不同,其他操作都是和yml相同的。

    coder.name=smartpig

    coder.lang=Java,Kotlin

    coder.softwares.cut=pr

    coder.softwares.image=ps

    coder.pet.name=bigdog

    coder.pet.type=dog

    @Value和@ConfigurationProperties的区别

    EL表达式 将配置文件中的修改为如下

    coder:

      name: ${smartpig} //改为EL表达式

      lang: [Java,Kotlin]

      softwares: {cut: pr,image: ps}

      pet:

        name: bigdog

        type: dog

    使用@ConfigurationProperties时会报错:Could not resolve placeholder 'smartpig' in value "${smartpig}";使用@Value则不会报错

    校验 

    在Coder类中增加校验,验证coder.name不为空串 

    @Component

    @Validated

    @ConfigurationProperties(prefix = "coder")

    public class Coder {

        @NotEmpty

        private String name;

    }

    配置文件改为 

    coder:

      name:  //改为empty

      lang: [Java,Kotlin]

      softwares: {cut: pr,image: ps}

      pet:

        name: bigdog

        type: dog

    使用@ConfigurationProperties时会报错: 

    Property: coder.name

    Value:

    Origin: class path resource [application.yml]:2:8

    Reason: 不能为空

    使用@Value不会进行校验

    复杂类型 

    使用@Value注入coder.name没有问题,如果使用@Value注入复杂类型,比如List 

    @Component

    //@ConfigurationProperties(prefix = "coder")

    public class Coder {

        private String name;

        @Value("${coder.lang}")  //使用复杂类型注入lang

        private List<String> lang;

        private Map<String,String> softwares;

        private Pet pet;

    }

    将会报错:Could not resolve placeholder 'coder.lang' in value "${coder.lang}"

    最后:

    上面都是自己整理好的!我就把资料贡献出来给有需要的人!顺便求一波关注,哈哈~各位小伙伴关注我后私信【Java】就可以免费领取哒

    作者:天才猪不是猪

    链接:https://juejin.im/post/5e55dc17e51d4527143e4a6e

    相关文章

      网友评论

        本文标题:Spring Boot配置文件注入

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