一.热部署
1.1 什么是热部署
首先来看重启和重载的区别
重启(Restart):自定义开发代码,包含类、页面、配置文件等,加载位置restart类加载器
重载(ReLoad):jar包,加载位置base类加载器
而热部署仅仅加载当前开发者自定义开发的资源,不加载jar资源。也就是说热部署只会重启项目,不会重载项目。
1.2 手工启动热部署
第一步:开启开发者工具
第二步:在idea中按Ctrl+F9,激活热部署
1.3 自动启动热部署
第一步:在settings中找到Compiler,勾选Build project auttomatically
第二步:在Settings中找到Advanced Settings,勾选Allow auto-make to start....即可
第三步:idea会在失去焦点5秒后,自动启动热部署
1.4 热部署范围配置
1.4.1 默认不触发重启的目录列表
/META-INF/maven
/META-INF/resources
/resources
/static
/public
/templates
1.4.2 自定义不参与重启的排除项
1.5 禁用热部署
可以通过设置高优先级属性禁用热部署,例如在主启动类中添加以下代码即可。
二.SpringBoot配置高级
2.1 @ConfigurationProperties
@ConfigurationProperties注解既可以为自定义的bean绑定属性,也可以为第三方bean绑定属性。
为自定义的bean绑定属性前边已经介绍过,下面介绍为第三方bean绑定属性。
第一步:在aplication.yml配置文件中添加以下内容
第二步:在第三方bean上添加注解@ConfigurationProperties(prefix="datasource"),即可为第三方bean中属性名为driverClassName的属性绑定值。
注意:@EnableConfigurationProperties({添加了@ConfigurationProperties的class文件})注解可以将使用了@ConfigurationProperties注解对应的自定义的类加入Spring容器。所以,@EnableConfigurationProperties与@Component不能同时使用,因为会将同一个bean加入二次spring容器,从而造成程序出错。
2.2 宽松绑定
@ConfigurationProperties绑定属性支持属性名宽松绑定。直接通过例子来介绍一下所谓的宽松绑定。
首先,创建一个ServerConfig类,并在其上方添加@ConfigurationProperties(prefix="servers")注解
其次,在application.yml中的配置可以写成如下几种形式,以下的四种写法都可以为ServerConfig类中的属性赋上值,这就是所谓的宽松绑定。
第一种:驼峰模式
第二种:下划线模式
第三种:中划线模式
第四种:常量模式
注意:
1.宽松绑定不支持注解 @Value 引用单个属性的方式
2.绑定前缀名命名规范:仅能使用纯小写字母、数字、下划线作为合法的字符
2.3 常用计量单位
SpringBoot支持JDK8提供的时间与空间计量单位,分别是
-
时间计量单位:Duration、
-
空间计量单位:DataSize
通过在属性上面添加对应的注解来规定此属性的单位。
2.4 数据校验
开启数据校验有助于系统安全性,J2EE规范中JSR303规范定义了一组有关数据校验相关的API。
2.4.1 校验注解
JSR 提供的校验注解
-
@Null 被注释的元素必须为 null
-
@NotNull 被注释的元素必须不为 null
-
@AssertTrue 被注释的元素必须为 true
-
@AssertFalse 被注释的元素必须为 false
-
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
-
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
-
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
-
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
-
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
-
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
-
@Past 被注释的元素必须是一个过去的日期
-
@Future 被注释的元素必须是一个将来的日期
-
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
Hibernate Validator 提供的校验注解:
-
@NotBlank(message =) 验证字符串非 null,且长度必须大于 0
-
@Email 被注释的元素必须是电子邮箱地址
-
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
-
@NotEmpty 被注释的字符串的必须非空
-
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
2.4.2 开启数据校验步骤
第一步:添加 JSR303 规范坐标与 Hibernate 校验框架对应坐标
第二步:开始校验
校验请求体(@RequestBody)
通过校验注解为属性添加校验规则
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
@NotNull(message = "classId 不能为空")
private String classId;
@Size(max = 33)
@NotNull(message = "name 不能为空")
private String name;
@Pattern(regexp = "((^Man$|^Woman$|^UGM$))", message = "sex 值不在可选范围")
@NotNull(message = "sex 不能为空")
private String sex;
@Email(message = "email 格式不正确")
@NotNull(message = "email 不能为空")
private String email;
}
我们在需要验证的参数上加上了@Valid 注解,如果验证失败,它将抛出MethodArgumentNotValidException。默认情况下,Spring 会将此异常转换为 HTTP Status 400(错误请求)。
@RestController
@RequestMapping("/api")
public class PersonController {
@PostMapping("/person")
public ResponseEntity<Person> getPerson(@RequestBody @Valid Person person) {
return ResponseEntity.ok().body(person);
}
}
校验请求参数(@RequestParam、@PathVariable)
校验请求参数时,除了在方法参数前面加上@Valid注解之外,也不要忘记在类上加上 @Validated 注解,这个注解可以告诉 Spring 去校验方法参数。
@RestController
@RequestMapping("/api")
@Validated
public class PersonController {
@GetMapping("/person/{id}")
public ResponseEntity<Integer> getPersonByID(@Valid @PathVariable("id") @Max(value = 5,message = "超过 id 的范围了") Integer id) {
return ResponseEntity.ok().body(id);
}
}