SpringBoot-05-Profile&JSR303

SpringBoot-Profile

Profile(多环境配置)

在实际开发中,一个项目通常会存在多种环境。Profile在不同环境下使用不同的配置提供了支持,可以通过激活,指定参数来快速切换环境。

多Profile文件方式

当我们项目中有多个环境时,我们要对不同的环境进行区分
区分格式:

	application-{profile}.properties/yaml

profile用来指定不同的环境,通常使用简称,例如dev、test、和prod等等。

properties配置

在resources目录下添加4个配置环境

  • application.properties 主配置文件
  • application-dev.properties:开发环境配置文件
  • application-test.properties:测试环境配置文件
  • application-prod.properties:生产环境配置文件

application.properties

	#默认端口号
sever.port=8080

#激活指定的profile
spring.profiles.active=prod

application-dev.properties

#端口号
server.port=8081

application-prod.properties

#端口号
server.port=8082

application-test.properties

#端口号
server.port=8083

测试

在这里插入图片描述
发现我们设置的相应环境生效,yaml配置类似

多Profile文档块模式

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

application.yml

#默认配置
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

注意:如果yml和properties同时都配置了端口,并且没有激活其他环境 , 默认会使用properties配置文件的!

激活Profile

有三种方式

  • 配置文件(上面既是)
  • 命令行激活
  • 虚拟机激活
  1. 命令行激活
    将SpringBoot项目打包成jar文件,执行mvn命令
		mvn clean package

项目打包完后配置命令行参数,激活指定Profile

	java -jar helloworld-0.0.1-SNAPSHOT.jar  
	--spring.profiles.active=dev
  1. 虚拟机激活

同样需要项目打包,配置命令行参数不同

	java -Dspring.profiles.active=prod -jar 
	helloworld-0.0.1-SNAPSHOT.jar

SpringBoot默认配置文件

配置文件加载位置

外部加载资源配置的文件的方式有狠毒偶,我们选择开发中最常用资源文件进行配置。

官方外部配置文件说明参考文档
在这里插入图片描述
springboot启动会扫描以下位置的application.properties或者application.yaml文件作为Spring boot的默认配置文件:

	优先级1:项目路径下的config文件夹配置文件
	优先级2:项目路径下配置文件
	优先级3:资源路径下的config文件夹配置文件
	优先级4:资源路径下配置文件

优先级由高到底,高优先级的配置会覆盖低优先级的配置

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

这里可参考别的文章
[(http://c.biancheng.net/spring_boot/default-config.html)]

SpringBoot外部配置文件

除了外部配置文件外,SpringBoot还可以加载一些位于项目外部的配置文件。
指定外部配置文件的路径

  • spring.config.location
  • spring.config.additional-location

spring.config.location

可以先将 Spring Boot 项目打包成 JAR 文件,然后在命令行启动命令中,使用命令行参数 --spring.config.location,指定外部配置文件的路径。

java -jar {JAR}  --spring.config.location={外部配置文件全路径}
  1. 在本地目录下D:\myConfig下,创建一个配置文件my-application.yaml 配置如下
	#指定配置文件
	server:
	  port: 8088
  1. 执行以下 mvn 命令,将 springbootdemo 项目打包成 JAR。

     mvn clean package
    
  2. 打开命令行窗口,跳转到 JAR 文件所在目录,执行以下命令,其中 --spring.config.location 用于指定配置文件的新位置。

java -jar springbootdemo-0.0.1-SNAPSHOT.jar  --spring.config.location=D:\myConfig\my-application.yml

spring.config.additional.location

其他步骤和spring.config.locaition一致,命令行窗口命令不同

	java -jar springbootdemo-0.0.1-SNAPSHOT.jar  --			spring.config.additional-location=D:\myConfig\my-application.yml

注意:Maven 对项目进行打包时,位于项目根目录下的配置文件是无法被打包进项目的 JAR 包的,因此位于根目录下的默认配置文件无法在 JAR 中生效,即该项目将只加载指定的外部配置文件和项目类路径(classpath)下的默认配置文件

  • spring.config.location 使项目默认的配置文件失效
  • spring.config.additional-location不会使项目默认的配置文件失效,使用该命令行参数添加的外部配置文件会与项目默认的配置文件共同生效,形成互补配置,且其优先级是最高的,比所有默认配置文件的优先级都高

通过上面的示例,我们看到将 Spring Boot 项目打包后,然后在命令行启动命令中添加 spring.config.additional-location 参数指定外部配置文件,会导致项目根目录下的配置文件无法被加载,我们可以通过以下 3 种方式解决这个问题。

在 IDEA 的运行配置(Run/Debug Configuration)中,添加虚拟机参数 -Dspring.config.additional-location=D:\myConfig\my-application.yml,指定外部配置文件;
在 IDEA 的运行配置(Run/Debug Configuration)中,添加程序运行参数 --spring.config.additional-location=D:\myConfig\my-application.yml,指定外部配置文件;
在主启动类中调用 System.setProperty()方法添加系统属性 spring.config.additional-location,指定外部配置文件。


JSR303数据校验

数据校验

	JSR是Java Specification Requests的缩写,意思是Java 规范提案,数据
校验就是对字段进行过滤验证,来保证数据的合法性,通常使用在yaml配置中的字
段。

如何使用

SpringBoot可以用@validated来校验数据,果数据异常则会统一抛出异常,方便异常中心统一处理。

导入依赖:

<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.16.Final</version>
</dependency>

代码展示:

@Component      //注册Bean到容器中
@ConfigurationProperties(prefix="person")
@Validated      //数据校验
public class Person {

   @Email(message = "邮件格式不正确")
    private String name;
    private Integer age;
    private Date date;
    private Boolean isStudent;      //属性的名称正规一点
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

测试:
在这里插入图片描述

常见参数

	@NotNull(message="名字不能为空")
	private String userName;
	@Max(value=120,message="年龄最大不能查过120")
	private int age;
	@Email(message="邮箱格式错误")
	private String email;
	
	空检查
	@Null       验证对象是否为null
	@NotNull    验证对象是否不为null, 无法查检长度为0的字符串
	@NotBlank   检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
	@NotEmpty   检查约束元素是否为NULL或者是EMPTY.
	    
	Booelan检查
	@AssertTrue     验证 Boolean 对象是否为 true  
	@AssertFalse    验证 Boolean 对象是否为 false  
	    
	长度检查
	@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内  
	@Length(min=, max=) string is between min and max included.
	
	日期检查
	@Past       验证 Date 和 Calendar 对象是否在当前时间之前  
	@Future     验证 Date 和 Calendar 对象是否在当前时间之后  
	@Pattern    验证 String 对象是否符合正则表达式的规则
	
	.......等等
	除此以外,我们还可以自定义一些数据校验规则		
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值