首页 > 其他分享 >SpringBoot 多元化配置(正则表达式,配置文件优先级)

SpringBoot 多元化配置(正则表达式,配置文件优先级)

时间:2024-10-06 20:18:13浏览次数:9  
标签:优先级 SpringBoot 配置文件 Spring 配置 Value application 注解

1.配置绑定

所谓“配置绑定”就是把配置文件中的值与 JavaBean 中对应的属性进行绑定。通常,我们会把一些配置信息(例如,数据库配置)放在配置文件中,然后通过 Java 代码去读取该配置文件,并且把配置文件中指定的配置封装到 JavaBean(实体类) 中。

SpringBoot 提供了以下 2 种方式进行配置绑定:

  • 使用 @Value 注解

  • 使用 @ConfigurationProperties 注解

解决中文乱码问题

@Value基础类型配置

当我们只需要读取配置文件中的某一个配置时,可以通过 @Value 注解获取。

语法:

@Value("${key}")
数据类型  成员变量;

@Value注解 

① ${ property : default_value }​

注入的是外部配置文件对应的property 

② #{ obj }​

1.是SpEL表达式

2.可以表示常量的值


#----------------key-value--------------------------

demo.name = 张三

#---------------数组与集合--------------------------

demo.myarray = 张三,李四,王五
demo.mylist  = 张三,李四,王五
demo.myset   = 张三,李四,王五

#--------------------Map----------------------

demo.mymap = {name: '张三', age: 22}

#--------------------日期----------------------demo.birthday1  = 2022/05/23demo.birthday2 = 2022-05-21demo.birthday3  = 2022-05-21 15:23:55


@Configurationpublic class MyConfig {
    @Value("${demo.name:李四}")    private String name;
    @Value("${demo.myarray}")    private String[] myarray;
    @Value("${demo.mylist}")    private List<Object> mylist;
    @Value("${demo.myset}")    private Set<Object> myset;
    @Value("#{${demo.mymap}}")    private Map<String,Object> mymap;
	@Value("#{100-3}")
    int num;
    @Value("${demo.birthday1}")    private Date birthday1;    3    @Value("${demo.birthday2}")    @DateTimeFormat(pattern = "yyyy-MM-dd")    private LocalDate birthday2;        @Value("${demo.birthday3}")    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")    private LocalDateTime birthday3;

}

@ConfigurationProperties注解

通过 Spring Boot 提供的 @ConfigurationProperties 注解,可以将配置文件中的配置数据绑定到 JavaBean 中。


boy.name = 潘周聃
boy.age = 21
boy.birthday = 2020-10-09 14:23:15
boy.hobbyArray =  逛街2,看电影,吃饭
#boy.friendMap =  {name:'彭于晏',age:35} 不支持
boy.friendMap.name = 彭于晏
boy.friendMap.age = 35

boy.email = [email protected]
boy.password = z8niiea676
boy.price = 12.17
boy.phone = 13291132789
BOY.FIRST_NAME = 佩奇

package com.beiyou.config;




@Component
@ConfigurationProperties(prefix = "boy")
@Data
@Validated
public class Boy {

    private String name;

    private String firstName;

    @Pattern(regexp = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$", message = "必需为11位")
    private String phone;

    @Pattern(regexp = "^[0-9]+(\\.[0-9]{2})?$", message = "必需为两位小数")
    private String price;

    @NotNull
    @Size(min = 6,max = 10)
    @Pattern(regexp = "^[0-9A-Za-z]*$", message = "编号为数字和字母组合")
    private String password;

    @Min(20)
    private int age;

    @Email
    private String email;

    @Size(min=2, max=3)
    private String[] hobbyArray;

    @Past
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime birthday;

    private Map friendMap;

}


  1. 只有在容器中的组件,才会拥有 SpringBoot 提供的强大功能。如果我们想要使用 @ConfigurationProperties 注解进行配置绑定,那么首先就要保证该对 JavaBean 对象在 IoC 容器中,所以需要用到 @Configuration 注解来添加组件到容器中。

  2. JavaBean 上使用了注解 @ConfigurationProperties(prefix = "myadmin") ,它表示将这个 JavaBean 中的所有属性与配置文件中以“myadmin”为前缀的配置进行绑定。

@PropertySource

如果将所有的配置都集中到 application.properties 或 application.yml 中,那么这个配置文件会十分的臃肿且难以维护,因此我们通常会将与 Spring Boot 无关的配置(例如自定义配置)提取出来,写在一个单独的配置文件中,并在对应的 JavaBean 上使用 @PropertySource 注解指向该配置文件。

我们也可以自定义配置文件,例如新建 user.properties ,配置内容如下:

pro.username=admin
pro.password=123456
pro.birthday=2000/12/01
pro.age=23
pro.books={jsp:36,html:360,spring:65}
pro.hobby=23,34
pro.list=sprig,myatis
pro.set=34,45,56

配置类:

@Component
@PropertySource("classpath:user.properties")
@Data
public class User {
    @Value("${pro.username}")
    String username;

    @Value("${pro.password}")
    String password;

    @Value("${pro.birthday}")
    Date birthday;

    @Value("${pro.age}")
    int age;

    @Value("#{${pro.books}}")
    Map books;

    @Value("${pro.hobby}")
    String [] hobby;

    @Value("${pro.list}")
    List list;

    @Value("${pro.set}")
    Set set;
}

注:该注解只能引用properties文件

配置属性校验证

自定义配置文件时,可以使用@Validated注解对注入的值进行一些简单的校验,示例代码

@Validated
@Configuration
@ConfigurationProperties(prefix = "person")
public class Person {
 @Email
 private String mail;

 public String getMail() {
 return mail;
 }

 public void setMail(String mail) {
 this.mail = mail;
 }
}

@Email 注解会对mail字段的注入值进行检验,如果注入的不是一个合法的邮件地址则会抛出异常。

其它常见注解:

  • @AssertFalse 校验false

  • @AssertTrue 校验true

  • @DecimalMax(value=,inclusive=) 小于等于value,inclusive=true,是小于等于

  • @DecimalMin(value=,inclusive=) 与上类似

  • @Max(value=) 小于等于value

  • @Min(value=) 大于等于value

  • @Null 被注解的元索必须为空

  • @NotNull 被注解的元素必须不为空

  • @Past 检查日期

  • @Future 被注解的元素必须是一个将来的日期

  • @Pattern(regex=,flag=) 正则

  • @Size(min=, max=) 字符串,集合,map限制大小

  • @Validated 对po实体类进行校验

上述的这些注解位于javax.validation.constraints包下, SpringBoot 2.3.0以后maven引用:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

注: 属性校验只适用于批量注解

Pattern正则校验

在实体类的字段名上添加@Pattern注解,有个属性regexp,该属性的值就是正则表达式。

//数字和字母组合或空字符串 :
@Pattern(regexp = "^[0-9A-Za-z]*$", message = "编号为数字和字母组合")

^ 表示匹配字符串的开始位置 (例外 用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串)
$ 表示匹配字符串的结束位置
* 表示匹配 零次到多次
+ 表示匹配 一次到多次 (至少有一次)
? 表示匹配零次或一次
. (圆点)表示匹配单个字符
| 表示为或者,两项中取一项(可用于两个正则之间)
( ) 小括号表示匹配括号中全部字符
[ ] 中括号表示匹配括号中一个字符 范围描述 如[0-9 a-z A-Z]
{ } 大括号用于限定匹配次数 如 {n}表示匹配n个字符 {n,}表示至少匹配n个字符 {n,m}表示至少n,最多m
\ 转义字符 如上基本符号匹配都需要转义字符 如 \*表示匹配*号
\w 表示英文字母和数字 \W 非字母和数字
\d 表示数字 \D 非数字
\s表示空字符串
当使用-时,需要放在最后一个位置,否则会被当成数字和字母之间区间的标识
 

//数字和字母组合 :
    @Pattern(regexp = "^[0-9A-Za-z]*$", message = "编号为数字和字母组合")
    @NotNull()
    private String classNo ;

正则表达式在线测试 | 菜鸟工具

正则表达式在线测试 | 菜鸟工具 (jyshare.com)

一、校验数字的表达式

  • 数字:^[0-9]*$

  • n位的数字:^\d{n}$

  • 至少n位的数字:^\d{n,}$

  • m-n位的数字:^\d{m,n}$

  • 零和非零开头的数字:^(0|[1-9][0-9]*)$

  • 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(\.[0-9]{1,2})?$

  • 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})$

  • 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$

  • 有两位小数的正实数:^[0-9]+(\.[0-9]{2})?$

  • 有1~3位小数的正实数:^[0-9]+(\.[0-9]{1,3})?$

  • 非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$

  • 非零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$

  • 非负整数:^\d+$ 或 ^[1-9]\d*|0$

  • 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$

  • 非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$

  • 非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$

  • 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

  • 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$

  • 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

二.校验字符的表达式

  • 汉字:^[\u4e00-\u9fa5]{0,}$

  • 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$

  • 长度为3-20的所有字符:^.{3,20}$

  • 由26个英文字母组成的字符串:^[A-Za-z]+$

  • 由26个大写英文字母组成的字符串:^[A-Z]+$

  • 由26个小写英文字母组成的字符串:^[a-z]+$

  • 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$

  • 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$

  • 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$

  • 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$

  • 可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+

  • 禁止输入含有~的字符:[^~]+

三、特殊需求表达式

  • Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

  • 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?

  • InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

  • 手机号码:^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$

  • 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$

  • 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}

  • 电话号码正则表达式(支持手机号码,3-4位区号,7-8位直播号码,1-4位分机号): ((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)

  • 身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X:(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)

  • 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

  • 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$

  • 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8-10 之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$

  • 强密码(必须包含大小写字母和数字的组合,可以使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

  • 日期格式:^\d{4}-\d{1,2}-\d{1,2}

  • 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$

  • 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$

  • 钱的输入格式:

  • 有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$

  • 这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$

  • 一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$

  • 这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧。下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$

  • 必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$

  • 这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$

  • 这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$

  • 1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$

  • 备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里

  • xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$

  • 中文字符的正则表达式:[\u4e00-\u9fa5]

  • 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))

  • 空白行的正则表达式:\n\s*\r (可以用来删除空白行)

  • HTML标记的正则表达式:<(\S*?)[^>]*>.*?|<.*? /> ( 首尾空白字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)

  • 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)

  • 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)

  • IPv4地址:((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}

总结:@Value 与 @ConfigurationProperties 对比

@Value 和 @ConfigurationProperties 注解都能读取配置文件中的属性值并绑定到 JavaBean 中,但两者存在以下不同。

@ConfigurationProperties

@Value

位置不同

JavaBean类名上

JavaBean属性上

功能

批量属性注入

单值绑定

松散绑定(松散语法)

支持

部分支持

Spel

不支持

支持

复杂类型封装

支持

支持,比较繁琐

JSR303数据校验

支持

不支持

应用场景不同

通过JavaBean获取整个配置文件

单个属性值

1. 使用位置不同

  • @ConfigurationProperties:标注在 JavaBean 的类名上;

  • @Value:标注在 JavaBean 的属性上。

2. 功能不同

  • @ConfigurationProperties:用于批量绑定配置文件中的配置;

  • @Value:只能一个一个的指定需要绑定的配置。

3. 松散绑定支持不同

@ConfigurationProperties:支持松散绑定(松散语法),例如实体类 Person 中有一个属性为 firstName,那么配置文件中的属性名支持以下写法:

  • person.firstName

  • person.first-name

  • person.first_name

  • PERSON.FIRST_NAME

@Vaule:不支持松散绑定。

4. SpEL 支持不同

  • @ConfigurationProperties:不支持 SpEL 表达式;

  • @Value:支持 SpEL 表达式。

5. 复杂类型封装

  • @ConfigurationProperties:支持所有类型数据的封装,例如 Map、List、Set、以及对象等;

  • @Value:支持基本数据类型的封装,例如字符串、布尔值、整数等类型, 对集合Map list set配置有要求

6.属性校验

  • @Value不支持属性校验

  • @ConfigurationProperties 支持属性校验

7. 应用场景不同

@Value 和 @ConfigurationProperties 两个注解之间,并没有明显的优劣之分,它们只是适合的应用场景不同而已。

  • 若只是获取配置文件中的某项值,则推荐使用 @Value 注解;

  • 若专门编写了一个 JavaBean 来和配置文件进行映射,则建议使用 @ConfigurationProperties 注解。

我们在选用时,根据实际应用场景选择合适的注解能达到事半功倍的效果。

2.导入传统xml配置

默认情况下,Spring Boot 中是不包含任何的 Spring 配置文件的,即使我们手动添加 Spring 配置文件到项目中,也不会被识别。

Spring Boot提倡基于Java的配置。尽管你可以使用XML源,不过还是建议你使用@Configuration类作为主要配置源。通常定义了main方法的类也是使用@Configuration注解的一个很好的替补。

使用 @ImportResource 注解加载 Spring 配置文件

1.@ImportResource 导入 Spring 配置文件

在主启动类上使用 @ImportResource 注解可以导入一个或多个 Spring 配置文件,并使其中的内容生效。

1、在resources下创建beans.xml文件,如下

<?xml version="1.0" encoding="UTF-8"?>
<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">

</beans>

2、创建业务测试类

接口 OrderService

public interface OrderService {
    public void test();
}

实现类OrderServiceImpl

public class OrderServiceImpl  implements OrderService{

    @Override
    public void test() {
        System.out.println("xml配置获取类的实例");
    }
}

3、在beans.xml中增加配置

<bean id="orderService" class="com.by.OrderServiceImpl"/>

4、引入xml文件

@SpringBootApplication
@ImportResource(value = "classpath:beans.xml")

5、测试

​ 注入OrderService

2.@import导入其它配置类

您无需将所有内容都@Configuration放在一个类中。@Import注释可以用于导入额外的配置类。另外,您可以@ComponentScan用来自动拾取所有Spring组件,包括@Configuration类。

示例

1、更改配置类

package cn.test;

public class B {
    
    public void  test(){

        System.out.println("我是外包的类");

    }
}

2、测试引用

如果配置类跟主类在同一包及其子包下,无需引入,在不同包下通过@Import引入既可。

@SpringBootApplication
@Import({B.class})
public class DemoApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext ctx = SpringApplication.run(DemoApplication.class, args);
        B bean = ctx.getBean(B.class);
        bean.test();
   }
}

3.@Configuration全注解方式加载 Spring 配置

Spring Boot 推荐我们使用全注解的方式加载 Spring 配置,其实现方式如下:

  1. 使用 @Configuration 注解定义配置类,替换 Spring 的配置文件;

  2. 配置类内部可以包含有一个或多个被 @Bean 注解的方法,这些方法会被 AnnotationConfigApplicationContext 或AnnotationConfigWebApplicationContext 类扫描,构建 bean 定义(相当于 Spring 配置文件中的<bean></bean>标签),方法的返回值会以组件的形式添加到容器中,组件的 id/name 就是方法名。

3.Profile(多环境配置)

在实际的项目开发中,一个项目通常会存在多个环境,例如,开发环境、测试环境和生产环境等。不同环境的配置也不尽相同,例如开发环境使用的是开发数据库,测试环境使用的是测试数据库,而生产环境使用的是线上的正式数据库。

Profile 为在不同环境下使用不同的配置提供了支持,我们可以通过激活、指定参数等方式快速切换环境。

3.1多 Profile 文件方式

Spring Boot 的配置文件共有两种形式:.properties 文件和 .yml 文件,不管哪种形式,它们都能通过文件名的命名形式区分出不同的环境的配置,文件命名格式为:

application-{profile}.properties/yml

XML

其中,{profile} 一般为各个环境的名称或简称,例如 dev、test 和 prod 等等。

properties 配置

在 src/main/resources 下添加 4 个配置文件:

  • application.properties:主配置文件

  • application-dev.properties:开发环境配置文件

  • application-test.properties:测试环境配置文件

  • application-prod.properties:生产环境配置文件

在 application.properties 文件中,指定默认服务器端口号为 8080,并通过以下配置激活生产环境(prod)的 profile。

#默认端口号
server.port=8080
#激活指定的profile
spring.profiles.active=prod

在 application-dev.properties 中,指定开发环境端口号为 8081,配置如下

# 开发环境
server.port=8081

在 application-test.properties 中,指定测试环境端口号为 8082,配置如下。

# 开发环境
server.port=8082

在 application-pro.properties 中,指定生产环境端口号为 8083,配置如下。

# 开发环境
server.port=8083

3.2 yml 配置

与 properties 文件类似,我们也可以添加 4 个配置文件:

  • application.yml:默认配置

  • application-dev.yml:开发环境配置

  • application-test.yml:测试环境配置

  • application-prod.yml:生产环境配置

在 applcation.yml 文件中指定默认服务端口号为 8080,并通过以下配置来激活开发环境的 profile。

#默认配置
server:
  port: 8080
#切换配置
spring:
  profiles:
    active: dev #激活开发环境配置

在 application-dev.yml 中指定开发环境端口号为 8081,配置如下。

#开发环境
server:  port: 8081

在 application-test.yml 中指定测试环境端口号为 8082,配置如下。

#测试环境
server:  port: 8082

在 application-pro.yml 中指定生产环境端口号为 8083,配置如下。

#生产环境
server:  port: 8083

3.3多 Profile 文档块模式

在 YAML 配置文件中,可以使用“---”把配置文件分割成了多个文档块,因此我们可以在不同的文档块中针对不同的环境进行不同的配置,并在第一个文档块内对配置进行切换。

#默认配置
server:
  port: 8080
#切换配置
spring:
  profiles:
    active: test
---
#开发环境
server:
  port: 8081
spring:
  config:
    activate:
      on-profile: dev
---
#测试环境
server:
  port: 8082
spring:
  config:
    activate:
      on-profile: test
---
#生产环境
server:
  port: 8083
spring:
  config:
    activate:
      on-profile: prod

3.4激活 Profile

除了可以在配置文件中激活指定 Profile,Spring Boot 还为我们提供了另外 2 种激活 Profile 的方式:

  • 命令行激活

  • 虚拟机参数激活

命令行激活

我们可以将 Spring Boot 项目打包成 JAR 文件,并在通过命令行运行时,配置命令行参数,激活指定的 Profile。

打开命令行窗口,跳转到 JAR 文件所在目录,执行以下命令,启动该项目,并激活开发环境(dev)的 Profile。

java -jar sbdemo-0.0.1-SNAPSHOT.jar  --spring.profiles.active=dev

Java

以上命令中,--spring.profiles.active=dev 为激活开发环境(dev)Profile 的命令行参数。

虚拟机参数激活

我们还可以在 Spring Boot 项目运行时,指定虚拟机参数来激活指定的 Profile。

4.默认配置文件优先级别

通常情况下,Spring Boot 在启动时会将 resources 目录下的 application.properties 或 apllication.yml 作为其默认配置文件,我们可以在该配置文件中对项目进行配置,但这并不意味着 Spring Boot 项目中只能存在一个 application.properties 或 application.yml。

Spring Boot 项目中可以存在多个 application.properties 或 apllication.yml。

Spring Boot 启动时会扫描以下 5 个位置的 application.properties 或 apllication.yml 文件,并将它们作为 Spring boot 的默认配置文件。

  1. file:./config/*/ 高

  2. file:./config/

  3. file:./

  4. classpath:/config/

  5. classpath:/ 低

注:file: 指当前项目根目录;classpath: 指当前项目的类路径,即 resources 目录。

以上所有位置的配置文件都会被加载,且它们优先级依次降低,序号越小优先级越高。其次,位于相同位置的 application.properties 的优先级高于 application.yml。

所有位置的文件都会被加载,高优先级配置会覆盖低优先级配置,形成互补配置,即:

  • 存在相同的配置内容时,高优先级的内容会覆盖低优先级的内容;

  • 存在不同的配置内容时,高优先级和低优先级的配置内容取并集。

标签:优先级,SpringBoot,配置文件,Spring,配置,Value,application,注解
From: https://blog.csdn.net/zhzjn/article/details/142731101

相关文章

  • 基于java+springboot的酒店预定网站、酒店客房管理系统
    该系统是基于Java的酒店客房预订系统设计与实现。是给师弟开发的毕业设计。现将源代码开放出来,感兴趣的同学可以下载。演示地址前台地址:http://hotel.gitapp.cn后台地址:http://hotel.gitapp.cn/admin后台管理帐号:用户名:admin123密码:admin123源码地址https://git......
  • 基于java+springboot的租房网站、房屋出租管理系统
    该系统是基于java+springboot+vue开发的租房管理系统。是给师弟开发的课程作业。学习过程中,遇到问题可以留言咨询。演示地址前台地址:http://zf.gitapp.cn后台地址:http://zf.gitapp.cn/admin后台管理帐号:用户名:admin123密码:admin123源码地址https://github.com/g......
  • 【VMware VCF】使用 SFTP 服务器备份 VCF 核心组件的配置文件。
    可以定期对VMwareCloudFoundation环境中的相关核心组件(如SDDCManager、NSXManager以及vCenterServer等)创建配置备份,以防止当意外故障或数据丢失时,能够进行恢复。默认情况下,NSXManager组件的备份将创建并存储在SDDCManager设备中内置的SFTP服务器上,建议单独创建......
  • java毕业设计-基于Springboot的助农产品采购平台【代码+论文+PPT】
    全文内容包括:1、采用技术;2、系统功能;3、系统截图;4、部分代码;5、配套内容。索取方式见文末微信号,欢迎关注收藏!一、采用技术语言:Java1.8框架:SSM数据库:MySQL5.7、8.0开发工具:IntelliJIDEA旗舰版其他:Maven3.8以上二、系统功能商家管理:负责商家入驻、审核、信息及商品上架权限......
  • 基于SpringBoot+Vue+协同过滤算法的音乐推荐系统设计与实现(源码+论文+PPT+部署文档教
    具体实现截图网站首页页面主要包括系统首页、热门歌曲、音乐资讯、留言板、个人中心等内容,并根据需要进行详细操作;如图5-1所示:图5-1网站首页界面图在注册流程中,用户在Vue前端填写必要信息(如用户名、密码等)并提交。前端将这些信息通过HTTP请求发送到Java后端。后端处理......
  • springboot+vue基于的电商购物系统【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,电子商务已成为现代社会不可或缺的一部分。电子商务不仅改变了人们的购物方式,还极大地推动了全球经济的发展。近年来,电商平台如雨后春笋般涌现,市场竞争日益激烈。为了在激烈的市场竞争中脱颖而出,电商平台需要......
  • springboot+vue基于SpringBoot的经典诗文学习平台【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景在信息化高速发展的今天,传统文化的学习与传播方式正经历着深刻的变革。经典诗文作为中华文化的瑰宝,承载着千年的智慧与情感,对于提升国民文化素养、增强民族认同感具有重要意义。然而,传统的学习方式如翻阅纸质书籍、参加诗词讲座等,在时......
  • springboot社区管理系统-计算机毕业设计源码68405
     基于微信小程序的社区管理系统的设计与实现摘要随着移动互联网的快速发展,微信小程序作为一种轻量级的应用程序,因其便捷性、易用性和广泛的用户基础,已成为连接用户与服务的重要桥梁。特别是在社区管理领域,微信小程序以其独特的优势,为社区提供了一个全新的管理和服务模式。......
  • 织梦php数据库配置文件
    织梦CMS(DedeCMS)的数据库配置文件通常位于安装目录下的 include 文件夹中,具体文件名为 config.inc.php。这个文件包含了数据库连接的所有必要信息。下面详细说明如何配置这个文件。步骤1:备份现有配置文件在修改任何配置文件之前,最好先备份现有的配置文件,以防万一。备份配......
  • 找到织梦CMS的数据库配置文件,以便了解数据库的具体连接信息
    首先,找到织梦CMS的数据库配置文件,以便了解数据库的具体连接信息。数据库配置文件路径织梦CMS安装目录假设织梦CMS安装在 /var/www/html 目录下。数据库配置文件位于 include/config.inc.php。打开配置文件使用FTP工具或服务器上的文件管理器,打开织梦CMS安装目录下......