springBoot优质生态拓展(二维码,API文档,可视化...)必看系列

事件处理机制⭐️

QuickStart

步骤:

  1. 设置一个Event.

public class LoginSuccessEvent extends ApplicationEvent {
    public LoginSuccessEvent(User user) {
        super(user);
    }
​
    public User getUser() {
        return (User) super.getSource();
    }
}

解释:

  • 这个Event的作用就是作为发布的 信息载体, EventListener接收到之后,都是从这个Event上面拿到信息的

注意:

  • 这个类要继承自(extends) ApplicationEvent

  1. 设置一个EventPublish

@Component
public class LoginSuccessEventPublisher {
​
    @Autowired
    private ApplicationEventPublisher publisher;
​
​
    public void publishEvent(User user) {
        LoginSuccessEvent event = new LoginSuccessEvent(user);
        publisher.publishEvent(event);
        System.out.println("LoginSuccessEvent published:对象是:\n"+event.getUser());
    }
}

注意:

  • 要把这个EventPublish通过@Component放入到IoC容器中去

  • 那个ApplicationEventPublisher要写在这个类的属性中去, 到时候Spring会自动将这个类通过构造方法注入到这里(Spring默认Bean机制)

  • 这个public void publishEvent(User user) {...}的方法名字可以随便命名

  1. 设置一个EventListener

@Component
public class LoginSuccessEventListener {
​
​
    @EventListener
    @Async
    public void get5Counts(LoginSuccessEvent event) throws InterruptedException {
        System.out.println("5积分开始运行");
        Thread.sleep(3000);
        System.out.println(event.getUser().getUuid()+":"+event.getUser().getUserName()+"登录成功,获取5积分");
    }
​
    @EventListener
    public void get10Counts(LoginSuccessEvent event) throws InterruptedException {
        System.out.println("10积分开始运行");
​
        Thread.sleep(3000);
        System.out.println(event.getUser().getUuid()+":"+event.getUser().getUserName()+"你很帅, 再获取10积分");
    }
​
    @EventListener
    public void tongBu(LoginSuccessEvent event) throws InterruptedException {
        System.out.println("同步方法");
        Thread.sleep(3000);
        System.out.println(event.getUser().getUuid()+":"+event.getUser().getUserName()+"同步方法");
    }
​
}

注意:

  • 加上@Component注解

  • 当事件被发布之后, 那么Listener会接受到, 然后开始执行EventListener中所有的方法. EventListener中所有方法默认同步执行.( 也就是说, 假如这个EventListener类中有a, b ,c 三个方法..那么会先执行a方法,等a方法结束,再执行b方法...最后执行c方法)

  • SpringBootApplication应用头上加上@EnableAsync, 然后再自己的监听类中的方法上加上@Async的加, 就可以开启异步处理功能.( 也就是说, 假如这个EventListener类中有a, b ,c 三个方法..那么a,b,c将会一起执行)

  • @Order注解用于定义多个监听器或监听方法的执行顺序。数值越小,优先级越高,越先执行。@Order可以应用于类级别(控制整个监听器类的优先级)或方法级别(控制同一个类中不同监听方法的执行顺序)。

设置定时任务(@EnableSchedule)

QuickStart
  1. 自定义一个类, 放入IoC容器. 然后在类里面写好自己的定时任务方法, 然后使用@Scheduled注解进行配置

    image-20240812140654083

  2. 然后在SpringBootApplication上加上注解@EnableScheduling

    image-20240812140502309

Detail

拓展知识:

  1. fixedRate

含义: 指定任务以固定的时间间隔执行,不论前一个任务是否完成。任务开始后,间隔固定的时间,下一次任务会再次启动。

  • 单位: 毫秒(ms)

  • 示例:

    @Scheduled(fixedRate = 5000)
    public void runTask() {
        // 任务每5秒执行一次
    }

    在这个示例中,runTask 方法每隔5秒执行一次,即使上一个任务还未执行完毕,新的任务也会开始执行。

  1. fixedDelay

  • 含义: 指定任务在前一个任务完成后等待固定的时间间隔,再开始执行下一个任务。也就是说,任务执行的时间间隔是从上一个任务完成后开始计算的。

  • 单位: 毫秒(ms)

  • 示例:

    @Scheduled(fixedDelay = 5000)
    public void runTaskWithFixedDelay() {
        // 任务执行完成后等待5秒再执行
    }

    在这个示例中,runTaskWithFixedDelay 方法在上一个任务执行完成后,会等待5秒再执行下一次任务。

  1. initialDelay

  • 含义: 指定任务首次执行的延迟时间。通常与 fixedRatefixedDelay 一起使用,表示在应用启动后,等待一段时间再开始第一次执行任务。

  • 单位: 毫秒(ms)

  • 示例:

    @Scheduled(fixedRate = 5000, initialDelay = 10000)
    public void runTaskWithInitialDelay() {
        // 应用启动10秒后开始执行,然后每5秒执行一次
    }

    在这个示例中,runTaskWithInitialDelay 方法会在应用启动10秒后开始执行,然后每隔5秒执行一次任务。

  1. cron

  • 含义: 使用Cron表达式定义任务的执行时间。Cron表达式可以非常灵活地定义复杂的时间规则,例如每天的某个时刻、每周的某几天等。

  • 单位: Cron表达式由6或7个字段组成,依次表示秒、分钟、小时、日期、月份、星期、年份(可选)。

  • 示例:

    @Scheduled(cron = "0 0 3 * * ?")
    public void runTaskWithCron() {
        // 每天凌晨3点执行
    }

    在这个示例中,runTaskWithCron 方法会在每天凌晨3点执行一次。

    Cron表达式的格式:

    • (0–59)

    • 分钟(0–59)

    • 小时(0–23)

    • 日期(1–31)

    • 月份(1–12)

    • 星期(0–7)(0或7表示星期日)

    • 年份(可选)

    特殊符号:

    • \*: 任意值

    • ,: 列出枚举值

    • -: 指定范围

    • /: 指定间隔

    • ?: 不指定具体值(用于日期和星期字段冲突时)

    例如,"0 0/15 8-10 * * *" 表示每天上午8点到10点之间,每15分钟执行一次。

  1. zone

  • 含义: 指定任务执行时的时区。可以配合cron表达式使用,以确保任务在正确的时区执行。

  • 示例:

    @Scheduled(cron = "0 0 10 * * ?", zone = "America/New_York")
    public void runTaskWithZone() {
        // 每天上午10点(纽约时间)执行
    }

    在这个示例中,runTaskWithZone 方法会在纽约时间每天上午10点执行。

流式响应文件(ResourceLoader)

QuickStart

步骤:

  1. 根据路径获取到文件资源

  2. 然后获取成功之后放入ResponseEntity的.body方法中就好,即可实现流式传输

@RestController
@CrossOrigin
@RequestMapping("/test")
public class TestFile {
    @Autowired
    private ResourceLoader resourceLoader;

    @GetMapping("get/file")
    public ResponseEntity<Resource> test() throws IOException {
        Resource resource = resourceLoader.getResource("file:C:/Users/86136/OneDrive/桌面/好/1713805670696.png");

        // 设置响应头
        HttpHeaders headers = new HttpHeaders();
        headers.set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + resource.getFilename());
        // 修改后的代码
        String fileName = resource.getFilename();
        String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
//        headers.set(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=\"" + encodedFileName + "\"");

        // 使用流式响应
        ResponseEntity<Resource> res= ResponseEntity.ok()
                .headers(headers)
                .contentLength(resource.contentLength())
                .body(resource);
        return res;
    }




}

优质Utils类库(Hutool)

Detail
  1. StrUtil(字符串工具类)⭐️

    • 功能: 提供字符串的各种操作,如判断、分割、拼接、格式化等。

    • 示例:

      String result = StrUtil.format("Hello, {}!", "World"); // 格式化字符串
      boolean isBlank = StrUtil.isBlank("  "); // 判断字符串是否为空白
      String[] parts = StrUtil.split("a,b,c", ','); // 分割字符串
  2. DateUtil(日期工具类)⭐️⭐️

    • 功能: 提供日期时间的解析、格式化、计算、比较等。

    • 示例:

      Date date = DateUtil.date(); // 获取当前时间
      String now = DateUtil.now(); // 获取当前时间字符串,格式: yyyy-MM-dd HH:mm:ss
      Date startOfDay = DateUtil.beginOfDay(date); // 获取一天的开始时间
      long betweenDays = DateUtil.between(date1, date2, DateUnit.DAY); // 计算两个日期之间的天数
  3. SecureUtil(安全工具类)⭐️

    • 功能: 提供各种加密、解密、摘要算法的实现,如 MD5、SHA、AES、DES 等。

    • 示例:

      String md5 = SecureUtil.md5("password"); // 生成MD5摘要
      String aesEncrypted = SecureUtil.aes().encryptHex("password"); // AES加密
  4. FileUtil(文件工具类)

    • 功能: 提供文件和目录操作,如读取、写入、删除、复制、压缩等。

    • 示例:

      File file = FileUtil.file("test.txt"); // 创建文件对象
      String content = FileUtil.readUtf8String(file); // 读取文件内容
      FileUtil.writeUtf8String("Hello, Hutool!", file); // 写入内容到文件
      FileUtil.copy("source.txt", "dest.txt", true); // 复制文件
  5. HttpUtil(HTTP工具类)⭐️

    • 功能: 提供简单易用的 HTTP 客户端功能,可以轻松发起 GET、POST 请求,并处理响应。

    • 示例:

      String result = HttpUtil.get("https://www.example.com"); // 发起GET请求
      Map<String, Object> params = new HashMap<>();
      params.put("key", "value");
      String response = HttpUtil.post("https://www.example.com", params); // 发起POST请求
  6. JsonUtil(JSON工具类)

    • 功能: 提供 JSON 的解析和生成方法,基于 JSONObjectJSONArray

    • 示例:

      String json = "{\"name\":\"Hutool\", \"age\":5}";
      JSONObject jsonObject = JSONUtil.parseObj(json);
      String name = jsonObject.getStr("name"); // 获取JSON中的字段
  7. Convert(类型转换工具类)⭐️⭐️

    • 功能: 提供各种类型之间的转换,如字符串到数字、集合到数组、对象到字符串等。

    • 示例:

      int num = Convert.toInt("123"); // 字符串转为数字
      String[] array = Convert.toStrArray("a,b,c"); // 字符串转为数组
      Date date = Convert.toDate("2024-08-13"); // 字符串转为日期
  8. CollUtil(集合工具类)⭐️⭐️

    • 功能: 提供对集合的各种操作,如过滤、排序、分组、交集、并集等。

    • 示例:

      List<String> list = CollUtil.newArrayList("a", "b", "c");
      List<String> subList = CollUtil.sub(list, 0, 2); // 获取子列表
      List<String> union = CollUtil.union(list1, list2); // 求集合的并集
  9. IdUtil(ID生成工具类)⭐️

    • 功能: 提供唯一 ID 的生成方法,如 UUID、雪花算法等。

    • 示例:

      String uuid = IdUtil.randomUUID(); // 生成UUID
      long snowflakeId = IdUtil.getSnowflake(1, 1).nextId(); // 生成雪花算法ID
  10. Validator(数据校验工具类)⭐️⭐️

  • 功能: 提供常见的校验功能,如邮箱、手机号、身份证号码、IP 地址等的校验。

  • 示例:

    boolean isEmail = Validator.isEmail("test@example.com"); // 校验邮箱格式
    boolean isMobile = Validator.isMobile("13800138000"); // 校验手机号格式
    boolean isIP = Validator.isIpv4("192.168.1.1"); // 校验IPv4地址格式
  1. MapUtil(Map工具类)⭐️⭐️

  • 功能: 提供对 Map 的常用操作,如创建、过滤、排序、合并等。

  • 示例:

    Map<String, String> map = MapUtil.of("a", "1", "b", "2");
    Map<String, String> sortedMap = MapUtil.sort(map); // 对Map按键排序
  1. XmlUtil(XML工具类)

  • 功能: 提供 XML 的解析和生成方法。

  • 示例:

    Document doc = XmlUtil.parseXml("<root><name>Hutool</name></root>");
    String name = XmlUtil.getElementText(doc.getDocumentElement(), "name"); // 获取XML中的元素文本
  1. BeanUtil(Bean工具类)

  • 功能: 提供对 JavaBean 的操作,如属性拷贝、对象转换等。

  • 示例:

    User user = new User();
    BeanUtil.copyProperties(map, user); // 将Map中的属性拷贝到JavaBean
  1. ReflectUtil(反射工具类)

  • 功能: 提供对 Java 反射的常用操作,如获取类信息、调用方法、修改字段等。

  • 示例:

    Method method = ReflectUtil.getMethod(User.class, "getName");
    ReflectUtil.invoke(user, method); // 反射调用方法
  1. SystemUtil(系统工具类)⭐️

  • 功能: 提供对系统属性、环境变量的获取和操作。

  • 示例:

    String javaVersion = SystemUtil.getJavaInfo().getVersion(); // 获取Java版本
    Map<String, String> env = SystemUtil.getEnv(); // 获取系统环境变量
  1. NumberUtil(数字工具类)⭐️⭐️

  • 功能: 提供对数字的常用操作,如精确计算、比较、格式化等。

  • 示例:

    double result = NumberUtil.add(1.2, 3.4); // 精确加法
    boolean isNumber = NumberUtil.isNumber("123"); // 判断是否为数字
  1. ArrayUtil(数组工具类)⭐️

  • 功能: 提供对数组的常用操作,如查找、排序、合并等。

  • 示例:

    int[] array = {1, 2, 3, 4, 5};
    int[] reversed = ArrayUtil.reverse(array); // 反转数组
    boolean contains = ArrayUtil.contains(array, 3); // 判断数组是否包含某元素
  1. ClassUtil(类工具类)⭐️

  • 功能: 提供对类的常用操作,如获取类名、包名、字段、方法等。

  • 示例:

    String className = ClassUtil.getClassName(User.class); // 获取类名
    Field[] fields = ClassUtil.getDeclaredFields(User.class); // 获取类的所有字段
  1. RegexUtil(正则工具类)

  • 功能: 提供对

正则表达式的常用操作,如匹配、替换、提取等。

  • 示例:

    boolean match = RegexUtil.isMatch("\\d+", "123"); // 判断是否匹配数字
    String[] groups = RegexUtil.findAll("\\d+", "12a34b56c"); // 提取所有匹配的数字
    String replaced = RegexUtil.replaceAll("a1b2c3", "\\d", "*"); // 替换数字为 *
  1. ThreadUtil(线程工具类)

  • 功能: 提供线程操作的常用方法,如创建线程池、休眠、异步执行等。

  • 示例:

    ThreadUtil.sleep(1000); // 线程休眠1秒
    ExecutorService executor = ThreadUtil.newExecutor(); // 创建一个新的线程池
    ThreadUtil.execute(() -> System.out.println("异步执行任务")); // 异步执行任务
  1. ZipUtil(压缩工具类)⭐️

  • 功能: 提供对 ZIP 压缩和解压缩的操作。

  • 示例:

    ZipUtil.zip("srcDir", "dest.zip"); // 压缩目录为ZIP文件
    ZipUtil.unzip("dest.zip", "outputDir"); // 解压缩ZIP文件到指定目录
  1. FileWatcher(文件监视器)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值