当前位置: 首页 > wzjs >正文

本地推广找哪些网站企业邮箱免费版开通

本地推广找哪些网站,企业邮箱免费版开通,wordpress 微信同步,百度智能云本文大纲📖 1、背景🍂2、SchedulerLock注解3、实现原理 1、背景🍂 Spring生态下,日常开发定时任务,使用Spring Task框架还是很常见的选择,但Spring Task并不是为分布式环境设计的,分布式环境下…

本文大纲📖

  • 1、背景🍂
  • 2、@SchedulerLock注解
  • 3、实现原理

1、背景🍂

Spring生态下,日常开发定时任务,使用Spring Task框架还是很常见的选择,但Spring Task并不是为分布式环境设计的,分布式环境下,服务被部署到多个节点,一个节点上运行着一个独立的Jvm,各个节点之间并不会协调通讯📞,因此,同一个定时任务会在每一个节点上都执行一次,导致任务重复执行,此时,可以考虑使用redis、zookeeper等中间件来实现分布式锁,保证一次只有一个节点执行任务,当然,也可以考虑支持分布式调度等框架,如Quartz、xxl-job

2、@SchedulerLock注解

在分布式场景下,可以使用@SchedulerLock注解来弥补Spring Task的缺点,注意⚠️,这个不是Spring的注解,是shedlock库的

package net.javacrumbs.shedlock.spring.annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface SchedulerLock {String name() default "";String lockAtMostFor() default "";String lockAtLeastFor() default "";
}@SchedulerLock

分布式锁的实现方式很多,官方也提供了不同中间件的实现示例:🎒https://github.com/lukas-krecan/ShedLock/blob/master/README.md,这里演示用mysql实现的过程

  • 引入相关依赖,注意依赖版本的兼容性
<dependency><groupId>net.javacrumbs.shedlock</groupId><artifactId>shedlock-spring</artifactId><version>4.42.0</version>
</dependency>
<dependency><groupId>net.javacrumbs.shedlock</groupId><artifactId>shedlock-provider-jdbc-template</artifactId><version>4.42.0</version>
</dependency>

在这里插入图片描述

  • 配置锁🔒提供者,这里是mysql
import net.javacrumbs.shedlock.core.LockProvider;
import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider;
import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.annotation.EnableScheduling;import javax.sql.DataSource;@Configuration
@EnableScheduling	//这个是Spring注解,开启Spring task功能的
@EnableSchedulerLock(defaultLockAtMostFor = "30m", defaultLockAtLeastFor = "1m")
public class LockConfig {@Beanpublic LockProvider lockProvider(@Qualifier("primaryDataSource") DataSource dataSource) {return new JdbcTemplateLockProvider(JdbcTemplateLockProvider.Configuration.builder()// 使用primaryDataSource这个自定义的数据源,和业务接口用一个数据源就行 .withJdbcTemplate(new JdbcTemplate(dataSource)).usingDbTime().build());}
}
  • 对应的库里建表
CREATE TABLE shedlock(name VARCHAR(64) NOT NULL, lock_until TIMESTAMP(3) NOT NULL,locked_at TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), locked_by VARCHAR(255) NOT NULL, PRIMARY KEY (name));
  • 使用
import net.javacrumbs.shedlock.spring.annotation.SchedulerLock;...@Scheduled(cron = "0 0 * * * *")
@SchedulerLock(name = "your.task.schedule.lockName")	//锁名称自定义,可以驼峰,可以点点点
public void scheduledTask() {// do something
}
  • 补充下,上面配置类里写了默认的锁持有的最长时间和最短时间,对于特定任务,可以自定义锁持有时间
@SchedulerLock(name = "TaskScheduler_CommonWhiteRisksReport", lockAtMostFor = "${task.schedulerLock.lockAtMost}", lockAtLeastFor = "${task.schedulerLock.lockAtLeast}")
task:schedulerLock:lockAtMost: "PT8M"lockAtLeast: "PT8M"# Duration的格式是ISO-8601,例如:
# "PT8M" 表示8分钟
# "PT30S" 表示30秒
# "PT1H" 表示1小时

3、实现原理

加@EnableSchedulerLock注解后,会引入SchedulerLockConfigurationSelector类

在这里插入图片描述
SchedulerLockConfigurationSelector类通过实现ImportSelector类,导入了两个Bean,LockConfigurationExtractorConfiguration 和 MethodProxyLockConfiguration, Sting数组里是要注册成Bean的类的全类名,这两步,就是ImportSelector接口搭配@Import注解声明Bean的方式一种使用

在这里插入图片描述
再往下,LockConfigurationExtractorConfiguration配置类声明了ExtendedLockConfigurationExtractor这个Bean,里面包含了锁的一些配置信息,如默认最大持有时间,这些配置是从注解的属性里拿到的,这回配置提取的Bean,会带着这些配置信息,给下面要提到的另一个Bean使用

在这里插入图片描述
另一个配置类,MethodProxyLockConfiguration,则是声明了MethodProxyScheduledLockAdvisor这个Bean,里面通过上面的lockConfigurationExtractor获取锁的一些配置

在这里插入图片描述

跟进MethodProxyLockConfiguration类,发现其获取了一个切面,切面就是包含@SchedulerLock注解的方法,切面拦截住以后,增强的部分是LockingInterceptor对象

在这里插入图片描述

而方法增强部分,就是根据我们提供的LockProvider来做加锁和释放锁的操作:比如mysql向库里写数据,Redis的setnx

在这里插入图片描述


文章转载自:

http://ysUDhIJ5.hxxyp.cn
http://2fi0mhv9.hxxyp.cn
http://tblfYQjd.hxxyp.cn
http://lbjcTvyR.hxxyp.cn
http://xZtze97m.hxxyp.cn
http://XRZRa5U8.hxxyp.cn
http://MmS31Sel.hxxyp.cn
http://o7pks5u1.hxxyp.cn
http://f1BHXx3F.hxxyp.cn
http://xRYk1ArQ.hxxyp.cn
http://2HtljZ31.hxxyp.cn
http://QKWJgehe.hxxyp.cn
http://mNkRX2cX.hxxyp.cn
http://7z058BDY.hxxyp.cn
http://jTS5qLlX.hxxyp.cn
http://moAK6Eel.hxxyp.cn
http://pOt3dN4w.hxxyp.cn
http://7DLe4rUe.hxxyp.cn
http://tRUufW4Z.hxxyp.cn
http://wWKYdui7.hxxyp.cn
http://hKP8tpzk.hxxyp.cn
http://WprGShj9.hxxyp.cn
http://5L6qPWVG.hxxyp.cn
http://luawtMb9.hxxyp.cn
http://xbvj46E9.hxxyp.cn
http://LxphsLjs.hxxyp.cn
http://RQ4iGmIo.hxxyp.cn
http://QYLB2vQm.hxxyp.cn
http://TjbB6bui.hxxyp.cn
http://PUtsxPGf.hxxyp.cn
http://www.dtcms.com/wzjs/735255.html

相关文章:

  • 网站开发是无形资产重庆网站制作长沙
  • 个体搞网站建设 经营范围杭州网站建设索q479185700
  • 汕头哪里做网站wordpress数据库缓存
  • 孝感新闻门户网站企业所得税缴纳标准
  • 永久免费网站建设方案学生html个人网页代码
  • 大型企业网站建设深圳网站建设开发公司哪家好
  • 网页制作与网站开发模板服装企业网站模板
  • 花卉电子商务网站开发企业年报网上申报系统
  • 做芯片外贸生意上哪个网站wordpress关闭订阅
  • 免费做试卷的网站做系统的网站好
  • 漳州微网站建设哪家好交互式网站如何做
  • 阜新市项目建设网站直播平台搭建
  • sns网站是什么网页设计制作规范
  • 网站推广--html关键词代码解说各大网站做推广的广告怎么做
  • 做qq动图的网站北京 网站设计公司
  • 公司网站设计主页部分怎么做seo竞争对手分析
  • 达内网站开发视频教程网站找不到的原因
  • 阜阳h5网站建设wordpress搭建电商教程
  • 广州手机网站定制咨询哪些人做数据监测网站
  • 涪陵建设工程信息网站互联网论坛有哪些
  • 丹东建设银行网站广东企业微信网站开发
  • 纯静态企业网站企业管理咨询合同书范本
  • 网站反链接学校网站建设制作方案
  • 广州网站建设哪家有专业旅游网站制作
  • 盘县网站开发wordpress 分类图片尺寸
  • 校园网站html模板聊天网站备案
  • 手机网站一键开发我想做代理商
  • 云谷系统网站开发一个完整的企业网站怎么做
  • 枣庄市住房和建设局网站教修图的网站
  • 猪八戒托管赏金做网站购物平台app