springboot开发实用篇(一)

一.热部署

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);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真滴book理喻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值