Spring Boot 配置

SpringBoot默认可使用两种形式的全局配置文件
application.properties
application.yml

配置文件用于修改SpringBoot的默认配置,配置文件放在src/main/resources目录或者类路径/config下。

.yml是YAML语言的文件,以数据为中心,比json、xml更适合做配置文件

YAML语法:
1、YAML基本语法
使用缩进表示层级关系
缩进时不允许使用TAB键,只允许使用空格键
缩进的空格数不重要,只要相同层级的元素左对齐即可
大小写敏感

2、YAML支持的三种数据结构
对象:键值对的集合(属性和值,也就是键值对)
k: v :在下一行写对象的属性和值的关系
friends:
lastName: zhangsan
age: 20
也可以采用行内写法:
friends: {lastName: zhangsan,age: 20}

数组:一组按次序排列的值(List、Set)
用-表示集合中的一个元素
pets:
-cat
-dog
-pig

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

字面值:单个的、不可再分的值(数字,字符串,布尔值)
k: v :字面值直接写
字符串默认不用加上单引号或双引号
“”:双引号,不会转义字符串里面的特殊字符,特殊字符会作为本身想表达的意思
name: ‘zhangsan \n lisi’,输出zhangsan 换行 lisi
‘’:单引号,会转义特殊字符,特殊字符只是一个普通的字符串
name: ‘zhangsan \n lisi’ ,输出zhangsan \n lisi

server:
  port: 8081
  context-path: /test  //指定项目访问路径

在配置文件中定义类属性,可以直接注入到POJO的类中
如配置文件中定义

Person:
  name: zhangsan
  age: 20
  birth: 2001/12/12
  maps:
    - k1: v1
    - k2: v2
  lists:
    - list1
    - list2
  dog:
    name: hapi
    age: 1

对应的POJO为Person,必须是一个受Spring容器管理的bean

@Component
@ConfigurationProperties(prefix = "Person")//该注解表明绑定配置文件中的配置,且前缀是Person
public class Person {

    private String name;
    private int age;
    private Date birth;
    private Map<String,Object> maps;

    private List<Object> lists;
    
    ....省略get,set方法
    
}
<!--用于在配置文件中出现提示 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

properties配置文件配置方式,但是IDEA默认properties使用的编码是utf-8,需要在运行时换位ACSII码。
在这里插入图片描述
在这里插入图片描述

除了使用@ConfigurationProperties从配置文件中获取值之外,还可以使用@Value注解,@Value支持SPEL表达式,不支持支持JSR303校验,不支持复杂的封装,如List、Set。

@Component
//@ConfigurationProperties(prefix = "Person")
public class Person {

    @Value("${Person.name}")
    private String name;
    @Value("#{1 * 10}")
    private int age;
}

在这里插入图片描述

配置文件yml和properties都能获取到值
如果说,我们只是在某个业务逻辑中需要获取配置文件中的某项值,使用@Value
如果编写了专门的javaBean来和配置文件进行映射,则应该使用@ConfigurationProperties

@ConfigurationProperties@PropertySource(只能用于properties文件)结合读取指定文件
@ConfigurationProperties默认从全局配置文件中获取
@PropertySource指定加载的配置文件,改变从默认的全局配置文件中读取数据
@PropertySource(value = {"classpath:person.propeties"})
@Component
@ConfigurationProperties(prefix = "Person")
public class Person {

    @Value("${Person.name}")
    private String name;
    @Value("#{1 * 10}")
    private int age;

    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    //省略get,set方法
}

@ImportResource读取外部配置文件
导入自己编写的Spring的配置文件,让配置文件中的内容生效,SpringBoot里面没有Spring的配置文件,自己编写的配置文件,默认无法识别,如果想让其生效,则使用@ImportResource注解标注在启动类上即可

@ImportResource(locations = {"classpath:自定义Spring配置文件"})
@SpringBootApplication
public class HelloWorld {

    public static void main(String[] args) {

        SpringApplication.run(HelloWorld.class,args);
    }
}

但是一般不采用上面的方式,推荐使用下面这种注解的方式,定义一个配置类,在配置类中编写bean的注入,这样在启动SpringBoot的时候会自动扫描该配置类,并将编写的Bean自动添加到Spring容器中。

/**
 * @Configuration指明当前类是一个配置类,用来代替Spring的xml形式
 */
@Configuration
public class MyConfigure {

    // @Bean注解将方法的返回值添加到容器中,容器中这个Bean的默认Id就是方法名
    @Bean
    public HelloService helloService(){

        return new HelloService();
    }
}

在配置文件中可以使用随机数,如 r a n d o m . v a l u e 、 {random.value}、 random.value{random.int}、 r a n d o m . l o n g 、 {random.long}、 random.long{random.uuid}。
在配置文件中使用占位符,可以在配置文件中引用前面配置过的属性

Person:
  name: zhangsan${random.uuid}
  age: 20
  birth: 2001/12/12
  maps:
    - k1: v1
    - k2: v2
  lists:
    - list1
    - list2
  dog:
    name: ${Person.name:hello}_hapi
    age: 1

${Person.name:默认值}来指定找不到属性时的默认值。

Profile
是Spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境。
1、多profile文件形式,默认使用application.properties/yml
格式:application-{profile}.properties/yml
application-dev.properties/yml、application-pro.properties/yml
2、多profile文档模块,使用yml语法可以用—来分模块,将多个文件合并到一个文件中,第一个为默认的文档块,当没有指定 spring.profiles.active的属性的时候,则默认加载第一个文档块的内容。

server:
  port: 8081
spring:
  profiles:
    active: dev

Person:
  name: zhangsan${random.uuid}
  age: 20
  birth: 2001/12/12
  maps:
    - k1: v1
    - k2: v2
  lists:
    - list1
    - list2
  dog:
    name: ${Person.name:hello}_hapi
    age: 1


---

server:
  port: 8082

spring:
  profiles: dev

---

server:
  port: 8083
spring:
  profiles: pro

3、激活方式:
命令行 : --spring.profiles.active=dev
配置文件: spring.profiles.active=dev
jvm参数: -Dspring.profiles.active=dev

配置文件加载位置
SpringBoot启动会扫描一下位置的application.properties或者application.yml文件作为SpringBoot的默认配置文件
file:./config/(当前项目的根目录下的config目录下)
file:./(当前项目的根目录下)
classpath:/config/
classpath:/
以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置内容
也可以通过配置spring.config.location来改变默认配置,一般用于运维时,比如项目打包之后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置,指定配置文件和默认加载的配置文件会一起起作用。
java -jar 打包的jar包 --spring.config.location=配置文件位置。

外部配置加载顺序
SpringBoot支持多种外部配置方式,及可以从以下位置加载配置,下面是优先级从高到低列出的,高优先级会覆盖低优先级的配置,所有的配置会想成互补配置。
在这里插入图片描述

优先加载带profile的,再来加载不带profile的,都是有jar包外向jar包内进行寻找。
在这里插入图片描述

配置文件和jar包放在同级目录下,会优先加载外面的配置文件
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值