SpringBoot 学习知识点

1、SpringBoot异步调用

        @EnableAsync @Async

2、SpringBoot全局异常使用

        @ControllerAdvice 定义全局异常处理类 @ExceptionHandler 用于定义函数针对的异常类型

3、SpringBoot重试机制

        @EnableRetry @Retryable

4、SpringBoot拦截器

        自定义实现HandlerInterceptor类的注入Spring容器中,preHandle、postHandle、afterCompletion。

5、SpringBoot 定时器。

        1、SpringBoot内置的定时

        添加依赖

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

        启动类添加注解

@SpringBootApplication
@EnableScheduling
public class SpringbootApplication {
	public static void main(String[] args) {
		SpringApplication.run(SpringbootApplication.class, args);
	}
}

           创建定时任务

                方式一、

@Component
public class SchedulerTask01 {

    private int count = 0;
    /**
     * @Description 设置没5秒执行一次
     * @Param
     * @return void
     **/
    @Scheduled(cron = "*/5 * * * * ?")
    private void process() {
        System.out.println("SchedulerTask01: is scheduler task running " + (count++));
    }

}

                方式二、                

@Component
public class SchedulerTask02 {

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    /**
     * @Description 设置每3秒执行一次
     **/
    @Scheduled(fixedRate = 3000)
    private void process() {
        System.out.println("SchedulerTask02: now time is " + dateFormat.format(new Date()));
    }

}

参数说明

@Scheduled 参数可以接受两种定时的设置,一种是我们常用的 cron="*/5 * * * * ?",一种是 fixedRate = 3000,两种都可表示固定周期执行定时任务。

fixedRate说明

  • @Scheduled(fixedRate = 3000):上一次开始执行时间点之后 3 秒再执行。
  • @Scheduled(fixedDelay = 3000):上一次执行完毕时间点之后 3 秒再执行。
  • @Scheduled(initialDelay=1000, fixedRate=3000):第一次延迟 1 秒后执行,之后按 fixedRate 的规则每 3秒执行一次

cron 略

        2、Quartz

        添加依赖

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

        定义一个Job

@Data
public class SampleJob extends QuartzJobBean {

    private String name;
    private int age;

    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) {
        System.out.println("QuartzJobBean-SampleJob-Quartz ---->  Hi, " + this.name + "---->" + this.age);
    }
}

        构建JobDetail

@Configuration
public class SampleScheduler {
    
    // 链式编程,可以携带多个参数,在Job类中声明属性 + setter方法
    @Bean
    public JobDetail sampleJobDetail() {
        return JobBuilder.newJob(SampleJob.class).withIdentity("sampleJob")
            .usingJobData("name", "World").
                usingJobData("age", 28).storeDurably().build();
    }
    
     // 每隔两秒执行一次
    @Bean
    public Trigger sampleJobTrigger() {
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever();
        return TriggerBuilder.newTrigger().forJob(sampleJobDetail()).withIdentity("sampleTrigger").withSchedule(scheduleBuilder).build();
    }
}

        JobBuilder 无构造函数,只能通过 JobBuilder 的静态方法 newJob(Class jobClass)生成 JobBuilder 实例。withIdentity 方法可以传入两个参数 withIdentity(String name,String group) 来定义 TriggerKey,也可以不设置,例如上文示例中会自动生成一个独一无二的 TriggerKey 用来区分不同的 Trigger。

3、CronSchedule方式

       定义两个Job

@Data
public class ScheduledJob01 implements Job {
    private String name;
    @Override
    public void execute(JobExecutionContext jobExecutionContext) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
        System.out.println("ScheduledJob01: " + name + "  ---->  " + dateFormat.format(new Date()));
    }
}
@Data
public class ScheduledJob02 implements Job {
    private String name;
    @Override
    public void execute(JobExecutionContext jobExecutionContext) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
        System.out.println("ScheduledJob02: " + name + "  ---->  " + dateFormat.format(new Date()));
    }
}

        构建Schedule来执行任务

@Component
public class CronSchedulerJob {

    @Autowired
    private SchedulerFactoryBean schedulerFactoryBean;

    // 6的倍数秒执行 即 6 12 18 24 30 36 42 ....
    private void scheduleJob1(Scheduler scheduler) throws SchedulerException {
        JobDetail jobDetail = JobBuilder.newJob(ScheduledJob01.class).withIdentity("job1", "group1").build();
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/6 * * * * ?");
        CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
            .usingJobData("name", "zbx001").withSchedule(scheduleBuilder).build();
        scheduler.scheduleJob(jobDetail, cronTrigger);
    }

    // 12秒的倍数执行 即 12  24 36  48  60
    private void scheduleJob2(Scheduler scheduler) throws SchedulerException {
        JobDetail jobDetail = JobBuilder.newJob(ScheduledJob02.class).withIdentity("job2", "group2").build();
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/12 * * * * ?");
        CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("trigger2", "group2")
            .usingJobData("name", "zbx002").withSchedule(scheduleBuilder).build();
        scheduler.scheduleJob(jobDetail, cronTrigger);
    }

    /**
     * @return void
     * @Description 同时启动两个定时任务
     **/
    public void scheduleJobs() throws SchedulerException {
        Scheduler scheduler = schedulerFactoryBean.getScheduler();
        scheduleJob1(scheduler);
        scheduleJob2(scheduler);
    }

}

        触发定时任务有两种方式:两种启动方案,在项目中选择一种使用即可,否则会导致重复启动定时任务而报错。 所以在测试某一个启动时,将另一个类上的注解注释掉就可以了。

        方式一:

@Configuration
@EnableScheduling
@Component
public class SchedulerListener {

    @Autowired
    public CronSchedulerJob scheduleJobs;

    @Scheduled(cron="0 47 16 24 1 ?")
    public void schedule() throws SchedulerException {
        scheduleJobs.scheduleJobs();
        System.out.println(">>>>>>>>>>>>>>>定时任务开始执行-0001<<<<<<<<<<<<<");
    }
}

        方式二:

@Component
public class MyStartupRunner implements CommandLineRunner {
    @Autowired
    public CronSchedulerJob scheduleJobs;
    @Override
    public void run(String... args) throws Exception {
        scheduleJobs.scheduleJobs();
        System.out.println(">>>>>>>>>>>>>>>定时任务开始执行-0002<<<<<<<<<<<<<");
    }
}

 6、SpringBoot ShardJDBC

        未完待续。。。

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 是一个基于 Spring 框架的开发框架,旨在简化 Java 应用程序的开发过程。它提供了自动配置、约定优于配置和快速启动等特性,使得开发者能够更快地搭建和部署应用程序。 以下是 Spring Boot 的一些详细知识点: 1. 自动配置(Auto-configuration):Spring Boot 通过使用自动配置来减少开发者的配置工作量。它根据 classpath 下的依赖来推断和配置应用程序的各种组件,如数据库连接、消息队列、Web 服务器等。 2. 约定优于配置(Convention over Configuration):Spring Boot 遵循约定大于配置的原则,通过默认的约定和命名规则来减少配置。开发者只需按照规定的方式组织代码和资源文件,Spring Boot 就能自动完成相关的配置。 3. 快速启动(Quick Start):Spring Boot 提供了一个快速启动的机制,只需编写一个主类,添加相应的注解和依赖,即可快速创建一个可执行的 Spring Boot 应用程序。 4. 内嵌容器(Embedded Container):Spring Boot 可以将应用程序打包为可执行的 JAR 文件,并且内置了常用的 Servlet 容器(如Tomcat、Jetty等),使得应用程序可以直接通过命令行或脚本启动,而无需外部容器。 5. 配置管理(Configuration Management):Spring Boot 提供了多种配置方式,包括 properties 文件、YAML 文件、环境变量、命令行参数等,方便开发者对应用程序的配置进行管理和切换。 6. Spring Boot Starter:Spring Boot Starter 是一组预定义的依赖关系,用于快速集成常见的技术栈(如数据库、消息队列、安全认证等),开发者只需添加相应的 Starter 依赖,即可获得相关的功能。 7. Actuator:Spring Boot Actuator 是 Spring Boot 的一个模块,提供了对应用程序的监控和管理功能,包括健康检查、性能指标、运行时信息等。 8. Spring Boot CLI:Spring Boot CLI 是一个命令行工具,可以快速创建和运行 Spring Boot 应用程序,方便开发者进行快速原型开发和测试。 除了上述知识点,Spring Boot 还提供了很多其他功能和特性,如集成测试、日志管理、安全认证等。学习 Spring Boot 可以帮助开发者提高开发效率,简化应用程序的配置和部署过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值