Spring定时任务与Spring MVC拦截器

Spring定时任务与Spring MVC拦截器

文章目录

1.定时任务

Spring框架提供了强大的定时任务支持。通过使用@Scheduled注解,可以将一个方法标记为定时任务,并指定任务的执行时间规则。可以设置任务在固定的时间点执行,也可以设置任务在一定的时间间隔内重复执行。Spring的定时任务功能更加灵活,支持各种时间表达式,也可以配置多线程执行任务。

1.1定时任务@Scheduled

  • 创建StaticScheduleTask类
  • cron = 秒 分 小时 日 月 周 年
java 复制代码
@Configuration   // 1.配置类
@EnableScheduling  // 2.开启定时任务

public class StaticScheduleTask {
    // 3.添加定时任务  每5秒执行一次
    @Scheduled(cron = "0/5 * * * * ?")
    public void configureTasks(){
        System.out.println("执行静态定时任务"+Thread.currentThread().getName());
    }
}



输出结果:
执行静态定时任务scheduling-1
执行静态定时任务scheduling-1
执行静态定时任务scheduling-1   

1.2创建多线程定时任务

复制代码
@Configuration   // 1.配置类
@EnableScheduling  // 2.开启定时任务
@EnableAsync // 开启多线程

public class StaticScheduleTask {
    // 3.添加定时任务  每5秒执行一次
    @Scheduled(cron = "0/5 * * * * ?")
    @Async// 多线程执行 异步
    public void configureTasks(){
        System.out.println("执行静态定时任务"+Thread.currentThread().getName());
    }
}
输出结果:
执行静态定时任务task-1
执行静态定时任务task-2
执行静态定时任务task-3

2.拦截器

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

2.1拦截器与过滤器的区别

  • 过滤器

    • servlet规范中的一部分,任何java web程序都可以使用。

    • 在url-pattern中配置之后,可以对所要访问的资源进行拦截

  • 拦截器拦截器

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

2.2SpringBoot中使用拦截器

2.2.1实现Handlerlnterceptor接口
java 复制代码
@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(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView){
        System.out.println("请求结束执行");
    }
    //afterCompletion是视图渲染完成后才执行的  
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("视图渲染完成后执行");
    }

}

2.2.2实现WebMvcConfigurer接口配置拦截路径

  • 三种方式

    • 继承WebMvcConfigurerAdapter (spring5.0 以弃用,不推荐)
    • 实现WebMvcConfigurer (推荐)
    • 继承WebMvcConfigurationSupport 会导致SpringBoot自动配置失效
  • 实现WebMvcConfigurer

    addlnterceptor:需要一个实现Handlerlnterceptor接口的拦截器实例

    addPathPaterns:用于设置拦截器的过滤路径规则

    addPathPatterns("/**")对所有请求都拦截

    excludePathPatterns:用于设置不需要拦截的过滤规则

    拦截器主要用途:进行用户登录状态的拦截,日志的拦截等

java 复制代码
@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");
    }
}
相关推荐
威哥爱编程6 小时前
【AI全栈12-01】Spring Boot 为何是 AI 全栈后端优选
java·spring boot·后端
威哥爱编程6 小时前
【AI全栈12-03】Spring Boot 用多模型路由把智能客服成本降下来
java·spring boot·后端
威哥爱编程6 小时前
【AI全栈12-02】Spring Boot 跑通第一个 AI 对话接口:HR 政策问答机器人实战
java·spring boot·后端
m0_587383007 小时前
深圳 24 小时自助健身房系统软件开发实战指南与案例解析
java·spring boot·小程序·架构·需求分析
企业数字化笔记8 小时前
AI工具参数很多怎么办?预设、表单校验、危险参数与配置审计
java·spring boot·python·音视频
huaweichenai9 小时前
spring boot对接阿里短信
java·spring boot
马剑威(威哥爱编程)9 小时前
【AI全栈后端12-08】Spring Boot 用 MCP 统一接入内部系统:让 AI 接一次,全公司复用
java·人工智能·spring boot
顽疲9 小时前
从零用 Java 实现小红书 SpringBoot Vue UniApp(23)笔记话题多对多:一条笔记进多个话题池
java·vue.js·spring boot
bst@微胖子9 小时前
Spring AI (5) : MCP 深度实战:从工具抽取到鉴权,SSE 与 STDIO
人工智能·spring·dubbo
做个文艺程序员10 小时前
MQ第02篇:RabbitMQ快速上手教程:AMQP模型详解+Spring Boot整合实战(附完整代码)
spring boot·消息队列·rabbitmq·java-rabbitmq·amqp