SprngBoot开发实用篇——学习笔记

本文介绍了SpringBoot的热部署,包括手工和自动启动,范围配置及关闭方法。同时讲解了高级配置,如第三方bean属性绑定(@ConfigurationProperties)和松散绑定的使用技巧。
摘要由CSDN通过智能技术生成

SprngBoot学习笔记



前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、热部署

1.1 手工启动热部署

(1)启动热部署
①:在Pom.xml文件中导入开发者工具对应的坐标

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

②:构建项目,可以使用快捷键激活此功能
在这里插入图片描述
对应的快捷键: Ctrl + F9

(2)关于热部署

  • 重启(Restart):自定义开发代码,包含类、页面、配置文件等,加载位置restart类加载器
  • 重载(ReLoad):jar包,加载位置base类加载器

(3)小结
小结

1.开启开发者工具后启用热部署

2.使用构建项目操作启动热部署(Ctrl+F9)

3.热部署仅仅加载当前开发者自定义开发的资源,不加载jar资源

(4)痛点
在这里插入图片描述

1.2 自动启动热部署

(1)旧版(2021.2前的版本)
①:设置自动构建项目
打开【File】,选择【settings…】,在面板左侧的菜单中找到【Compile】选项,然后勾选【Build project automatically】,自动构建项目
在这里插入图片描述
在这里插入图片描述
②:允许在程序运行时进行自动构建
使用快捷键【Ctrl】+【Alt】+【Shit】+【/】打开维护面板,选择第1项【Registry…】
在这里插入图片描述
在选项中搜索compile,然后勾选对应项即可(新版本的IDEA已经去除这个选项

(2)新版(2021.2后的版本)
注:新版本的IDEA,打开【File】,选择【settings…】,在面板左侧的菜单中找到【Advanced Settings】选项,然后勾选【Allow atuo-make to…】
在这里插入图片描述
激活方式:Idea失去焦点5秒后启动热部署

(3)小结

  1. 设置自动构建用于自动热部署

1.3 热部署范围配置

(1)配置中默认不参与热部署的目录信息如下

  • /META-INF/maven
  • /META-INF/resources
  • /resources
  • /static
  • /public
  • /templates

(2)自定义不参与重启排除项

spring:
  devtools:
    restart:
      # 设置不参与热部署的文件或文件夹
      exclude: static/**,public/**,config/application.yml

(3)小结

  1. 自定义重启排除项

1.4 关闭热部署功能

(1)属性加载优先顺序

①:参看https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config
在这里插入图片描述

②:禁用热部署

spring:
  devtools:
    restart:
      enabled: false

​ ③:如果当心配置文件层级过多导致相符覆盖最终引起配置失效,可以提高配置的层级,在更高层级中配置关闭热部署。例如在启动容器前通过系统属性设置关闭热部署功能。

@SpringBootApplication
public class Springboot12Application {

    public static void main(String[] args) {

        //禁用热部署
        System.setProperty("spring.devtools.restart.enable","false");
        SpringApplication.run(Springboot12Application.class);
    }

}

二、配置高级

2.1 第三方bean属性绑定(@ConfigurationProperties注解)

(1)
①:@ConfigurationProperties注解:此注解的作用是用来为bean绑定属性的。开发者可以在yml配置文件中以对象的格式添加若干属性。

servers:
  ip-address: 192.168.0.1 
  port: 2345
  timeout: -1

②:然后再开发一个用来封装数据的实体类,注意要提供属性对应的setter方法

@Component
@Data
public class ServerConfig {
    private String ipAddress;
    private int port;
    private long timeout;
}

③:使用@ConfigurationProperties注解就可以将配置中的属性值关联到开发的模型类上

@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
    private String ipAddress;
    private int port;
    private long timeout;
}

④:在启动类里测试

@SpringBootApplication
public class Springboot13ConfigurationApplication {

    public static void main(String[] args) {
        //获取容器对象
        ConfigurableApplicationContext run = SpringApplication.run(Springboot13ConfigurationApplication.class, args);
        ServerConfig bean = run.getBean(ServerConfig.class);
        System.out.println(bean);

    }
}

(2)使用@ConfigurationProperties为第三方bean绑定属性

①:使用@Bean注解定义第三方bean

 @Bean
    public DruidDataSource datasource(){
        DruidDataSource ds = new DruidDataSource();
        //ds.setDriverClassName("com.mysql.jdbc.cj.Driver");
        return ds;
    }
}

②:在yml中定义要绑定的属性,注意datasource此时全小写

datasource:
  driverClassName: com.mysql.jdbc.Driver

③:使用@ConfigurationProperties注解为第三方bean进行属性绑定,注意前缀是全小写的datasource

@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource datasource(){
    DruidDataSource ds = new DruidDataSource();
    //ds.setDriverClassName("com.mysql.jdbc.cj.Driver");
    return ds;
}

④:测试:

@SpringBootApplication
public class Springboot13ConfigurationApplication {

    @Bean
    @ConfigurationProperties(prefix = "datasource")
    public DruidDataSource datasource() {
        DruidDataSource ds = new DruidDataSource();
        //ds.setDriverClassName("com.mysql.jdbc.cj.Driver");
        return ds;
    }

    public static void main(String[] args) {
        //获取容器对象
        ConfigurableApplicationContext run = SpringApplication.run(Springboot13ConfigurationApplication.class, args);
        ServerConfig bean = run.getBean(ServerConfig.class);
        System.out.println(bean);

        DruidDataSource druidDataSource = run.getBean(DruidDataSource.class);
        System.out.println(druidDataSource.getDriverClassName());

    }
}

(3)@EnableConfigurationProperties

作用: 标注使用@ConfigurationProperties注解绑定属性的bean是哪些

①:在配置类上开启@EnableConfigurationProperties注解,并标注要使用@ConfigurationProperties注解绑定属性的类

@SpringBootApplication
@EnableConfigurationProperties(ServerConfig.class)
public class Springboot13ConfigurationApplication {
}

②:在对应的类上直接使用@ConfigurationProperties进行属性绑定

@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
    private String ipAddress;
    private int port;
    private long timeout;
}

当使用@EnableConfigurationProperties注解时,spring会默认将其标注的类定义为bean,因此无需再次声明@Component注解了

注意:
@EnableConfigurationProperties与@Component不能同时使用

(4)解除使用@ConfigurationProperties注释警告

出现这个提示后只需要添加一个坐标此提醒就消失了

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

(5)小结

  1. 使用@ConfigurationProperties可以为使用@Bean声明的第三方bean绑定属性
  2. 当使用@EnableConfigurationProperties声明进行属性绑定的bean后,无需使用@Component注解再次进行bean声明

2.1 松散绑定

(1)即配置文件中的命名格式与变量名的命名格式可以进行格式上的最大化兼容

(2)@ConfigurationProperties绑定属性支持属性名宽松绑定

servers:
#  ipAddress: 192.168.0.1       # 驼峰模式
#  ip_address: 192.168.0.2      # 下划线模式
  ip-address: 192.168.0.3      # 烤肉串模式
#  IP_ADDRESS: 192.168.0.4      # 常量模式

(3)注意:宽松绑定不支持注解@Value引用单个属性的方式

    @Bean
    @ConfigurationProperties(prefix = "data-source")
    public DruidDataSource datasource() {
        DruidDataSource ds = new DruidDataSource();
        return ds;
    }

(4)@Value和@ConfigurationProperties比较

项目@ConfigurationProperties@Value
功能批量注入配置文件中的属性分别指定
松散绑定(松散语法)支持不支持
SpEL不支持支持
JSR-303数据校验支持不支持
复杂类型封装支持不支持

无论配置文件是 yml 还是 properties 他们都能获取到值。

如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用 @Value。

如果说,我们专门编写了一个 JavaBean 来和配置文件进行映射,我们就直接使用@ConfigurationProperties。

(5)小结:

①:@ConfigurationProperties绑定属性支持属性名宽松绑定

②:@Value注解不支持松散绑定

③:绑定前缀命名命名规则

④:绑定前缀名推荐采用烤肉串命名规则,即使用中划线做分隔符

2.3 常用计量单位应用

2.4 bean属性校验

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值