跳至主要內容
SpringBoot 中定时任务的异步执行

Spring 的定时任务默认是单线程串行执行的, 那假设第一个任务比较耗时长, 直到超过任务二的设定时间之后才完成, 那么就会造成任务二不能及时完成, 进而造成其他问题

先来说说定时任务

开启对定时任务的支持, 在启动类上加上@EnableScheduling

// 启动类
@EnableScheduling
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

// 定时任务类
@Slf4j
@Service
public class ScheduledService {
    @Scheduled(fixedRate = 5000)
    public void scheduled1() {
        log.info("----{}----", Thread.currentThread().getName());
    }

    @Scheduled(cron = "0/5 * * * * *")
    public void scheduled2() {
        log.info("----{}----", Thread.currentThread().getName());
    }
}

logycoconut大约 1 分钟关于技术SpringBootAsync
SpringBoot实现自己的拦截器

在 Web 开发中,我们经常需要对请求拦截并做一些动作,比如日志记录、权限检测或者性能检测等

HandlerInterceptor

SpringMVC中提供了HandlerInterceptor接口, 我们来大致看一下它的源码 ( 省略参数和异常以方便阅读 )

public interface HandlerInterceptor {
    // 请求处理之前调用, 当此方法返回true时才执行后续代码, 否则流程中断
    default boolean preHandle() { return true; }

    // 请求处理之后调用
    default void postHandle() { }  
    
    // 请求完成之后调用, 一般用于资源的清理
    default void afterCompletion() { }
}

logycoconut大约 2 分钟关于技术SpringBoot
Zuul 的鉴权以及微服务的跨域问题
  • SpringCloud采用了Zuul作为微服务的网口
  • Zuul网关为全部微服务提供唯一入口, 避免直接暴露接口, 后台服务更加安全
  • 对每个请求鉴权
  • 处理跨域请求

跨域请求处理

关于跨域问题,现在一般都采用 CORS 方案(一个 W3C 标准)解决, 需要服务器和浏览器同时支持,但是开发者只需要关心服务器实现即可,其他的都由浏览器完成

浏览器会在请求中加上一些头信息,例如 Origin,我们需要以此判断是否允许其跨域,然后在响应头中加入一些信息


logycoconut大约 2 分钟关于技术SpringBoot