SpringBoot配置文件基本配置介绍

SpringBoot之配置文件

一、配置文件

a)基本介绍

​ ① SpringBoot使用的是一个全局的配置文件,配置文件名是固定的:application.properies;application.yml

​ ② 配置文件的作用是可修改springBoot自动配置的默认值(SpringBoot在底层都给我们自动配置好了)

二、YAML

a)基本介绍

YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。

① 优势: 以前的配置文件,大多都使用的是 xxxx.xml文件;YAML:以数据为中心比json、xml等更适合做配置文件,如下例子对比可见:

#yaml配置文件(显然YAML更加简洁不冗杂,更加适合做配置文件!)
server:
  port: 8081

<!--XML配置文件-->
<server>
	<port>8081</port>
</server>

b)YAML语法

1)基本使用

​ ① key:(空格)value:表示一对键值对(空格必须有)

​ ② 以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

​ ③ 属性和值是大小写敏感

​ ④ '#'表示注释

​ ⑤ 缩进不允许使用tab,只允许空格

server:
    port: 8088
    path: /hello

2)数据类型支持

① 字面量: 普通的值(数字,字符串,布尔)

字面直接来写:key:value

字符串默认不用加上单引号或者双引号(可以使用双引号或者单引号包裹特殊字符

② 对象、Map(属性和值)(键值对)

对象/Map 也是key:value的方式

friends:
		lastName: zhangsan
		age: 20
#行内写法
friends: {
    
    lastName: zhangsan,age: 18}

③ 数组(List、set)

- 开头的行表示数组中的一个元素

pets:
 - cat
 - dog
 - pig
 #行内写法
 pets: [cat,dog,pig]

三、配置文件值注入

a)javaBean

/**
 * 将配置文件中配置的每一个属性的值,映射到这个组件中
 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
 *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
 *
 * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
 *
 */
@Component
@ConfigurationProperties(prefix = "person")
@Validated//数据校验
public class Person {
    
    

    //@Email(加上注解后限制lastName必须是邮箱格式)
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;

    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

b)配置文件注入属性

person:
    lastName: hello
    age: 18
    boss: false
    birth: 2017/12/12
    maps: {
    
    zhangsan: 23,wangwu: 25}
    lists:
      - lisi
      - zhaoliu
    dog:
      name: 小狗
      age: 12

<!--在项目Pom中导入配置文件处理器,配置文件进行绑定就会有提示-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

c)注解@Value注入属性

@Component
public class Person {
    
    
   
    @Value("${person.name:HelloWorld!}")
    private String lastName;
    @Value("#{11*2}")
    private Integer age;
    @Value("true")
    private Boolean boss;

    //复杂类型无法封装
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

d)@Value获取值和@ConfigurationProperties获取值比较

@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持

​ 配置文件yml和properties都能获取到值,若我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,用@Value;若我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties

e)@PropertySource&@ImportResource&@Bean

​ ① @PropertySource:加载指定的配置文件

#person.properties文件

person.last-name=李四
person.age=12
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=dog
person.dog.age=15

@PropertySource(value = {
    
    "classpath:person.properties"})//类路径下加载属性
@Component
@ConfigurationProperties(prefix = "person")
//@Validated
public class Person {
    
    
    
    private String lastName;
    private Integer age;
    private Boolean boss;

​ ② @ImportResource:导入Spring的配置文件,让配置文件里面的

Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件不能被自动识别,想让Spring的配置文件生效(加载进来),@ImportResource标注在一个配置类上

@ImportResource(locations = {
     
     "classpath:beans.xml"})//导入Spring的配置文件让其生效
@SpringBootApplication
public class SpringBoot02ConfigApplication {
     
     

	public static void main(String[] args) {
     
     
		SpringApplication.run(SpringBoot02ConfigApplication.class, args);
	}
}
<?xml version="1.0" encoding="UTF-8"?><!--beans.xml配置文件-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


    <bean id="helloService" class="com.atguigu.springboot.service.HelloService"></bean>
</beans>

​ ③ @bean

SpringBoot推荐给容器中添加组件的方式推荐使用全注解的方式

1、配置类**@Configuration**------>Spring配置文件

2、使用**@Bean**给容器中添加组件

/**
 * @Configuration:指明当前类是一个配置类;用来替代之前的Spring配置文件
 *
 * 以前在配置文件中用<bean><bean/>标签添加组件
 *
 */
@Configuration
public class MyAppConfig {
     
     

    //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
    @Bean
    public HelloService helloService02(){
     
     
        System.out.println("配置类@Bean给容器中添加组件了...");
        return new HelloService();
    }
}

四、配置文件占位符

a)随机数

${
    
    random.value}、${
    
    random.int}、${
    
    random.long}
${
    
    random.int(10)}、${
    
    random.int[1024,65536]}

b)占位符获取之前配置的值,如果没有可以是用:指定默认值

person.last-name=张三${random.uuid}
person.age=${random.int}
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.hello:hello}_dog 
person.dog.age=15

五、Profile

a)多Profile文件

​ 在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml,默认使用application.properties的配置

b)yml支持多文档块方式


server:
  port: 8081
spring:
  profiles:
    active: prod

---
server:
  port: 8083
spring:
  profiles: dev


---

server:
  port: 8084
spring:
  profiles: prod  #指定属于哪个环境

c)激活指定profile

1、在配置文件中指定 spring.profiles.active=dev

2、命令行:

​ java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev(可直接在测试的时候,配置传入命令行参数)

3、虚拟机参数;

​ -Dspring.profiles.active=dev

六、配置文件加载位置

​ springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件;优先级由高到底,高优先级的配置会覆盖低优先级的配置;SpringBoot会从这四个位置全部加载主配置文件,互补配置。

–file:./config/

–file:./

–classpath:/config/

–classpath:/

猜你喜欢

转载自blog.csdn.net/weixin_45496190/article/details/107168783