欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 SpringBoot之配置文件

程序员文章站 2022-04-19 13:20:55
SpringBoot之配置文件一、配置文件a)基本介绍​①SpringBoot使用的是一个全局的配置文件,配置文件名是固定的:application.properies;application.yml​②配置文件的作用是可修改springBoot自动配置的默认值(SpringBoot在底层都给我们自动配置好了)二、YAMLa)基本介绍YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的...

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:/

本文地址:https://blog.csdn.net/weixin_45496190/article/details/107168783