首页 > 其他分享 >Spingboot 定时任务与过滤器,拦截器

Spingboot 定时任务与过滤器,拦截器

时间:2024-10-17 16:19:08浏览次数:3  
标签:10 拦截器 15 Spingboot 过滤器 定时 执行 public

 在 boot 环境中,一般来说,要实现定时任务,我们有两中方案,一种是使用 Spring 自带的定时
任务处理器 @Scheduled 注解,另一种就是使用第三方框架 Quartz ,Spring Boot 源自
Spring+SpringMVC ,因此天然具备这两个 Spring 中的定时任务实现策略,当然也支持
Quartz

1.定时任务 @Scheduled

@Configuration      //1.主要用于标记配置类
@EnableScheduling   // 2.开启定时任务
public class SaticScheduleTask {
   @Resource
   UserService userService;
   //3.添加定时任务 每隔5秒调用一次
   @Scheduled(cron = "0/5 * * * * ?")
   public void configureTasks() {
       userService.addUser();
       System.err.println("执行静态定时任务时间: " + LocalDateTime.now());
  }
}

cron = [秒] [分] [小时] [日] [月] [周] [年]

 

 月份中的日期和星期可能会起冲突,因此在配置时这两个得有一个是 ?

?:表示不指定值,即不关心某个字段的取值时使用。需要注意的是,月份中的日期和星期可能会
起冲突,因此在配置时这两个得有一个是?
*:表示所有值,例如:在秒的字段上设置 *,表示每一秒都会触发
,:用来分开多个值,例如在周字段上设置 "MON,WED,FRI" 表示周一,周三和周五触发
-:表示区间,例如在秒上设置 "10-12",表示 10,11,12秒都会触发
/:用于递增触发,如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,50)
#:序号(表示每月的第几个周几),例如在周字段上设置"6#3"表示在每月的第三个周六,(用 在母亲节和父亲节再合适不过了)周字段的设置,若使用英文字母是不区分大小写的 ,即 MON 与mon相同
L:表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会自动判断是否是润年),在周字段上表示星期六,相当于"7"或"SAT"(注意周日算是第一天)。如果在"L"前加上数字,则表示该数据的最后一个。例如在周字段上设置"6L"这样的格式,则表示"本月最后一个星期五"
W:表示离指定日期的最近工作日(周一至周五),例如在日字段上设置"15W",表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发,如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为 "1W",它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,"W"前只能设置具体的数字,不允许区间"-")
L 和 W 可以一组合使用。如果在日字段上设置"LW",则表示在本月的最后一个工作日触发

 0 0 2 1 ? :表示在每月 1 日的凌晨 2 点执行
0 15 10 ? * MON-FRI :表示周一到周五每天上午 10:15 执行
0 15 10 ? 6L 2019-2020 :表示 2019-2020 年的每个月的最后一个星期五上午 10:15 执行
0 0 10,14,16 ? :每天上午 10 点,下午 2 点,4 点执行
0 0/30 9-17 ? :朝九晚五工作时间内每半小时执行
0 0 12 ? * WED :表示每个星期三中午 12 点执行
0 0 12 ? :每天中午 12点执行
0 15 10 ? :每天上午 10:15 执行
0 15 10 ? :每天上午 10:15 执行
0 15 10 ? * :每天上午 10:15 执行
0 15 10 ? 2019 :2019 年的每天上午 10:15 执行

但是直接告诉AI会更快

创建多线程定时任务
@Configuration      //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling   // 2.开启定时任务
@EnableAsync        // 2.开启多线程
public class SaticScheduleTask {
   @Resource
   UserService userService;
   //3.添加定时任务
   @Scheduled(cron = "0/5 * * * * ?")
   @Async //异步方法 异步调用 默认为同步
   @Transactional //添加事务
   public void configureTasks() {
       userService.addUser();
       System.err.println("执行静态定时任务时间: " + LocalDateTime.now());
  }
}

根据Spring的文档说明,默认采用的是单线程的模式的。所以在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的。
那么当多个任务的执行势必会相互影响。例如,如果A任务执行时间比较长,那么B任务必须等到A任务执行完毕后才会启动执行。又如在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在spring3.x之后,已经内置了@Async来完美解决这个问题。

 2.拦截器

SpringMvc的处理拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理,开发可以自己定义一些拦截器来实现特定功能。
###拦截器与过滤器的区别

 过滤器:

  1. servlet规范中的一部分,任何java web程序都可以使用。
  2. 在url-pattern中配置之后,可以对所要访问的资源进行拦截。

拦截器:

  1. 拦截器在SpringMvc框架自己的,只有使用了SpringMvc框架工程才能使用。
  2. 拦截器只会拦截访问控制器的方法,如果访问的是js,css,image...是不会进行拦截的

这也是过滤器与拦截器的区别

 SpringBoot中使用拦截器

1. 实现HandlerInterceptor接口

@Component
public class LoginInterceptor implements HandlerInterceptor {
   //preHandle是请求执行前执行的
   @Override
   public boolean preHandle(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse, Object o) throws Exception {
       System.out.println("进入拦截器");
       return true;
  }
   //postHandler是请求结束执行的   当preHandle返回true才会执行
   public void postHandle.....
   
   //afterCompletion是视图渲染完成后才执行
   public void afterCompletion.....
}

2.实现WebMvcConfigurer接口配置拦截路径

三种方式:(说是三种其实是一种)

1. 继承WebMvcConfigurerAdapter   spring5.0 以弃用,不推荐
2. 实现WebMvcConfigurer 推荐
3. 继承WebMvcConfigurationSupport 会导致springboot自动配置失效

@Configuration
public class WebJavaBeanConfiguration implements WebMvcConfigurer {
   @Autowired
   private LoginInterceptor loginInterceptor;
   public void addInterceptors(InterceptorRegistry registry) {
       registry.addInterceptor(loginInterceptor)
      .addPathPatterns("/**")
      .excludePathPatterns("/user/login")
      .excludePathPatterns("/user/logout");
  }
}

 addInterceptor:需要一个实现HandlerInterceptor接口的拦截器实例
addPathPatterns:用于设置拦截器的过滤路径规则;
addPathPatterns("/**")对所有请求都拦截
excludePathPatterns:用于设置不需要拦截的过滤规则
拦截器主要用途:进行用户登录状态的拦截,日志的拦截等

标签:10,拦截器,15,Spingboot,过滤器,定时,执行,public
From: https://blog.csdn.net/QAZ412803/article/details/143021928

相关文章

  • Spring Cloud Gateway关键点全局Token过滤器,局部过滤器接口耗时,全链路跟踪TraceId日志
    一.全局Token过滤器在SpringCloudGateway中,实现全局过滤器的目的是对所有进入系统的请求或响应进行统一处理,比如添加日志、鉴权等。下面是如何创建一个全局过滤器的基本步骤:步骤1:创建过滤器类首先,你需要创建一个实现了GlobalFilter接口,创建一个全局token过滤器。@Slf......
  • 深入了解 Java 拦截器与过滤器
    在构建JavaWeb应用程序时,拦截器(Interceptor) 和 过滤器(Filter) 是两个重要的概念。它们在不同阶段拦截和处理HTTP请求和响应,帮助开发者对应用的处理流程进行更精细的控制。虽然它们在表面上看似相似,但拦截器和过滤器有着不同的架构设计和使用场景。本文将详细介绍它们的......
  • spingboot茶文化推广系统
    开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9浏览器:谷歌浏览器后台路径地址:localhost:8080/项目名称/admin/dist/index.html前台路径地址:localhost:80......
  • Gateway全局过滤器
    目录全局过滤器GlobalFilter案例定义全局过滤器,拦截并判断用户身份需求步骤自定义过滤器运行效果总结全局过滤器GlobalFilter全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。区别在于GatewayFilter通过配置定义,处理逻辑是......
  • Gateway过滤器执行顺序以及跨域问题
    执行顺序请求进入网关会碰到三类过滤器:当前路由的过滤器、DefaultFilter、GlobalFilter请求路由后,会将当前路由过滤器和DefaultFilter、GlobalFilter,合并到一个过滤器链(集合)中,排序后依次执行每个过滤器每一个过滤器都必须指定一个int类型的order值,order值越小,优先级越高,执......
  • 过滤器拦截器拦截了request后,controller的@RequestBody 无法获取request内容,报错 Requ
    SpringMVC的拦截器、过滤器、Controller之间的关系 众所周知所有的post请求中的body参数是已流形式存在的,而流数据只能读取一次(为啥看这里),如果在拦截器和过滤器中需要对post参数进行处理的话,就会报Requiredrequestbodyismissing异常。既然知道原因,那只要能将流保存起来......
  • 基于nodejs+vue基于SpingBoot的剧本杀管理系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着娱乐方式的多样化,剧本杀作为一种新兴的社交娱乐形式,近年来在年轻人中迅速流行。它融合了角色扮演、推理和解谜等元素,为玩家提供了沉浸式的体验。然而,随......
  • 过滤器和拦截器的区别是什么?
    首先,过滤器和拦截器都可以在请求的过程中插入一手,也可以进行拦腰截断。请求过程:当一个请求进来,先交给Web服务器提供的过滤器,来到Servlet,同时会有一个叫做DispatcherServlet的Servlet进行执行,在DispatcherServlet中就会调用我们的拦截器,再由DispatcherServlet分发给对应的Contro......
  • 三、Spring Boot集成Spring Security之securityFilterChain过滤器链详解
    二、默认过滤器链1、默认配置系统启动日志2、默认配置的过滤器及顺序如下org.springframework.security.web.session.DisableEncodeUrlFilterorg.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilterorg.springframework.security.web.c......
  • Spring 过滤器 拦截器 监听器 Aop
    目录Spring过滤器拦截器监听器Aop1.过滤器2.拦截器3.监听器4.Aop5.参考文档Spring过滤器拦截器监听器Aop1.过滤器1.简介 过滤器Filter用于对数据进行过滤和预处理 过滤器只能在请求前后使用 依赖于servlet容器基于函数回调实现其生命周期由servlet容器管......