Java

Spring Boot配置文件注入

2020-02-26  本文已影响0人  Java天天

在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

上一篇下一篇

猜你喜欢

热点阅读