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

济南著名网站建设wordpress提示安装

济南著名网站建设,wordpress提示安装,网络空间 网站 域名,傻瓜式建站软件下载这是一篇简简单单的文章#xff0c;需要你简简单单看一眼就好#xff0c;如果有不明白的地方#xff0c;欢迎留言讨论。 在之前的文章中出现过一次AOP的使用#xff0c;就是在运行任务之前#xff0c;需要判断一下#xff0c;触发该任务执行的server#xff0c;是不是数… 这是一篇简简单单的文章需要你简简单单看一眼就好如果有不明白的地方欢迎留言讨论。 在之前的文章中出现过一次AOP的使用就是在运行任务之前需要判断一下触发该任务执行的server是不是数据库中对应任务所在app的直接server使用的是注解DesignateServer本篇文章是从另一个注解再一次顺一遍AOP的使用而且本篇文章的注解再一次用到了可重入锁ReentrantLock这个也是之前的文章中说的内容可以再熟悉一遍本篇文章的入口就是注解——UseCacheLock。 从名字来看该注解是一个使用缓存时的一个锁该类位于tech.powerjob.server.core.lock包下用来修饰方法在运行时执行的源码如下 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface UseCacheLock {String type();String key();int concurrencyLevel(); } type从使用的代码处得出目前只有两种一种是processJobInstance另一种是processWfInstance key主要是任务id或者任务实例id还有工作流id。其中任务id或者任务实例id的选取是通过一个表达式来判断得出的。 concurrencyLevel缓存要用到的字段允许同时并发执行的写操作数。 UseCacheLock 的使用场景 该注解在powerjob中一共使用了8次其中2次出现在任务的派发6次出现在工作流的操作中这一次就选在任务的派发来讲一下该注解的使用场景。 UseCacheLock(type processJobInstance, key #jobInfo.getMaxInstanceNum() 0 || T(tech.powerjob.common.enums.TimeExpressionType).FREQUENT_TYPES.contains(#jobInfo.getTimeExpressionType()) ? #jobInfo.getId() : #instanceId, concurrencyLevel 1024) public void dispatch(JobInfoDO jobInfo, Long instanceId) {... ... } 方法内部的代码不重要主要是来看方法上面的注解里面的三个关键字分别是 processJobInstance #jobInfo.getMaxInstanceNum() 0 || T(tech.powerjob.common.enums.TimeExpressionType).FREQUENT_TYPES.contains(#jobInfo.getTimeExpressionType()) ? #jobInfo.getId() : #instanceId 1024 第一个和最后一个没什么好说的主要说一说中间那一条长长的表达式该表达式通过解读就是判断最大同时运行任务数是否大于0以及任务的时间表达式类型是不是FIX_RATE或者FIX_DELAY。这一表达式可以说除非人为的将MaxInstanceNum设置为0否则该条数据默认值就是1也就是说这个表达式不负责任的说99.99%都是真也就是说都会使用JobId作为key值。 按照代码来看就是当任务在派发的时候会使用到该注解为的是防止该方法同时运行派发同一个任务如果是同时派发两个不同的任务就不会有影响毕竟在派发的过程中涉及到了对任务实例的数据修改如果两个同时进行确实会产生问题。 UseCacheLock 的AOP处理 处理该注解的类个该类在同一个包处理的源代码如下所示 Around(value annotation(useCacheLock))public Object execute(ProceedingJoinPoint point, UseCacheLock useCacheLock) throws Throwable {CacheString, ReentrantLock lockCache lockContainer.computeIfAbsent(useCacheLock.type(), ignore - {int concurrencyLevel useCacheLock.concurrencyLevel();log.info([UseSegmentLockAspect] create Lock Cache for [{}] with concurrencyLevel: {}, useCacheLock.type(), concurrencyLevel);return CacheBuilder.newBuilder().initialCapacity(300000).maximumSize(500000).concurrencyLevel(concurrencyLevel).expireAfterWrite(30, TimeUnit.MINUTES).build();});final Method method AOPUtils.parseMethod(point);Long key AOPUtils.parseSpEl(method, point.getArgs(), useCacheLock.key(), Long.class, 1L);final ReentrantLock reentrantLock lockCache.get(String.valueOf(key), ReentrantLock::new);long start System.currentTimeMillis();reentrantLock.lockInterruptibly();try {long timeCost System.currentTimeMillis() - start;if (timeCost SLOW_THRESHOLD) {final SlowLockEvent slowLockEvent new SlowLockEvent().setType(SlowLockEvent.Type.LOCAL).setLockType(useCacheLock.type()).setLockKey(String.valueOf(key)).setCallerService(method.getDeclaringClass().getSimpleName()).setCallerMethod(method.getName()).setCost(timeCost);monitorService.monitor(slowLockEvent);log.warn([UseSegmentLockAspect] wait lock for method({}#{}) cost {} ms! key {}, args {}, , method.getDeclaringClass().getSimpleName(), method.getName(), timeCost,key,JSON.toJSONString(point.getArgs()));}return point.proceed();} finally {reentrantLock.unlock();} } 代码看着挺长的但是内容其实没有多少可以一步一步拆开来看。 缓存的创建 第一步通过type来获取缓存从文章开头我们知道这个type就两个类型processJobInstance就是用来派发任务的processWfInstance就是用来操作工作流任务的该代码里面就是processJobInstance如果缓存存在直接拿来用如果不存在则创建缓存来看一眼创建缓存的代码 CacheBuilder.newBuilder().initialCapacity(300000).maximumSize(500000).concurrencyLevel(concurrencyLevel).expireAfterWrite(30, TimeUnit.MINUTES).build(); 这个代码的大意就是创建一个有如下属性的缓存缓存有效时间是30分钟expireAfterWrite(30, TimeUnit.MINUTES)这就像鱼有7秒记忆一样这个缓存只能记录30分钟过期失效。缓存的最大条目数是50万maximumSize(500000)。指定用于缓存的hash table最低总规模是300000允许同时并发操作数是concurrencyLevel也就是传进来的1024. key值的获取 第二步就是获取key值该值主要是为了获取可重入锁用的获取该值的源代码如下所示 final Method method AOPUtils.parseMethod(point); Long key AOPUtils.parseSpEl(method, point.getArgs(), useCacheLock.key(), Long.class, 1L); 从这个代码可以看到用到了AOPUtil这个工具类的两个方法第一个方法是解析出当前的方法第二个是获取key值这个AOPUtil在tech.powerjob.server.common.utils包下。解析方法的源码如下备注解释各代码的目的 public static Method parseMethod(ProceedingJoinPoint joinPoint) {//获取接入点的签名此处必须是方法的签名否则会报异常Signature pointSignature joinPoint.getSignature();if (!(pointSignature instanceof MethodSignature)) {throw new IllegalArgumentException(this annotation should be used on a method!);}//强转成方法的签名MethodSignature signature (MethodSignature) pointSignature;//获取方法Method method signature.getMethod();//如果方法所处的类是一个interfaceif (method.getDeclaringClass().isInterface()) {try {//通过IoC容器获取目标对象然后再获取对象的方法method joinPoint.getTarget().getClass().getDeclaredMethod(pointSignature.getName(), method.getParameterTypes());} catch (SecurityException | NoSuchMethodException e) {ExceptionUtils.rethrow(e);}}return method; } 获取到了方法之后就是获取key值源代码如下备注解释各代码的目的 public static T T parseSpEl(Method method, Object[] arguments, String spEl, ClassT clazz, T defaultResult) {//获取到方法的参数值类型String[] params discoverer.getParameterNames(method);assert params ! null;//创建数据上下文EvaluationContext context new StandardEvaluationContext();for (int len 0; len params.length; len) {//将param[len] arguments[len]context.setVariable(params[len], arguments[len]);}try {//执行表达式也就是前面#jobInfo.getMaxInstanceNum() 0 || T(tech.powerjob.common.enums.TimeExpressionType).FREQUENT_TYPES.contains(#jobInfo.getTimeExpressionType()) ? #jobInfo.getId() : #instanceIdExpression expression parser.parseExpression(spEl);//返回表达式执行的结果以clazz设置的类型返回return expression.getValue(context, clazz);} catch (Exception e) {log.error([AOPUtils] parse SpEL failed for method[{}], please concat tjq to fix the bug!, method.getName(), e);return defaultResult;} } 经过以上两步key值就获取完毕了 加锁 加锁的源代码如下所示就是如果缓存里面保存了锁就直接拿到如果没有就new一个出来然后就启动锁 那两条时间主要是记录加锁的时间如果时间过长就要记录一条日志记录加锁慢时的任务信息。 final ReentrantLock reentrantLock lockCache.get(String.valueOf(key), ReentrantLock::new); long start System.currentTimeMillis(); reentrantLock.lockInterruptibly(); try {long timeCost System.currentTimeMillis() - start;... ... } ... ... 加锁结束之后就可以执行注解修饰的方法了执行就是下面这一行 point.proceed(); 执行结束之后将锁打开就OK了。 总结 本篇文章涉及的知识主要是AOP的使用可重入锁的使用IoC容器相关Spring的表达式的使用缓存Cache的创建每一个知识点都够我喝一壶了所以大家如果想要了解这些知识的细节请自行搜索去查想要了解的内容如果你懒得查也可以问我当然我也懒回不回答就看我心情了哼我外号就叫不高兴所以大家看着办吧。
文章转载自:
http://www.morning.qkgwx.cn.gov.cn.qkgwx.cn
http://www.morning.ysskn.cn.gov.cn.ysskn.cn
http://www.morning.kwrzg.cn.gov.cn.kwrzg.cn
http://www.morning.sqyjh.cn.gov.cn.sqyjh.cn
http://www.morning.sxlrg.cn.gov.cn.sxlrg.cn
http://www.morning.dcmnl.cn.gov.cn.dcmnl.cn
http://www.morning.trsfm.cn.gov.cn.trsfm.cn
http://www.morning.wkmpx.cn.gov.cn.wkmpx.cn
http://www.morning.rui931.cn.gov.cn.rui931.cn
http://www.morning.sfswj.cn.gov.cn.sfswj.cn
http://www.morning.osshjj.cn.gov.cn.osshjj.cn
http://www.morning.srbsr.cn.gov.cn.srbsr.cn
http://www.morning.rwzqn.cn.gov.cn.rwzqn.cn
http://www.morning.ymjrg.cn.gov.cn.ymjrg.cn
http://www.morning.nktxr.cn.gov.cn.nktxr.cn
http://www.morning.easiuse.com.gov.cn.easiuse.com
http://www.morning.tndhm.cn.gov.cn.tndhm.cn
http://www.morning.thxfn.cn.gov.cn.thxfn.cn
http://www.morning.plqqp.cn.gov.cn.plqqp.cn
http://www.morning.zcnwg.cn.gov.cn.zcnwg.cn
http://www.morning.snccl.cn.gov.cn.snccl.cn
http://www.morning.swkzr.cn.gov.cn.swkzr.cn
http://www.morning.qflwp.cn.gov.cn.qflwp.cn
http://www.morning.jfjpn.cn.gov.cn.jfjpn.cn
http://www.morning.kmrgl.cn.gov.cn.kmrgl.cn
http://www.morning.tkryt.cn.gov.cn.tkryt.cn
http://www.morning.zczkm.cn.gov.cn.zczkm.cn
http://www.morning.bgqr.cn.gov.cn.bgqr.cn
http://www.morning.jljwk.cn.gov.cn.jljwk.cn
http://www.morning.nxcgp.cn.gov.cn.nxcgp.cn
http://www.morning.ymrq.cn.gov.cn.ymrq.cn
http://www.morning.zwsgl.cn.gov.cn.zwsgl.cn
http://www.morning.wmdlp.cn.gov.cn.wmdlp.cn
http://www.morning.xbzfz.cn.gov.cn.xbzfz.cn
http://www.morning.klwxh.cn.gov.cn.klwxh.cn
http://www.morning.bpxmw.cn.gov.cn.bpxmw.cn
http://www.morning.dpflt.cn.gov.cn.dpflt.cn
http://www.morning.rxpp.cn.gov.cn.rxpp.cn
http://www.morning.djpzg.cn.gov.cn.djpzg.cn
http://www.morning.zrdqz.cn.gov.cn.zrdqz.cn
http://www.morning.rccpl.cn.gov.cn.rccpl.cn
http://www.morning.dbjyb.cn.gov.cn.dbjyb.cn
http://www.morning.jrslj.cn.gov.cn.jrslj.cn
http://www.morning.mcqhb.cn.gov.cn.mcqhb.cn
http://www.morning.fzqfb.cn.gov.cn.fzqfb.cn
http://www.morning.kjcll.cn.gov.cn.kjcll.cn
http://www.morning.znlhc.cn.gov.cn.znlhc.cn
http://www.morning.ywtbk.cn.gov.cn.ywtbk.cn
http://www.morning.hyyxsc.cn.gov.cn.hyyxsc.cn
http://www.morning.lxjxl.cn.gov.cn.lxjxl.cn
http://www.morning.sprbs.cn.gov.cn.sprbs.cn
http://www.morning.trplf.cn.gov.cn.trplf.cn
http://www.morning.ltrz.cn.gov.cn.ltrz.cn
http://www.morning.lfpzs.cn.gov.cn.lfpzs.cn
http://www.morning.yyzgl.cn.gov.cn.yyzgl.cn
http://www.morning.cpgdy.cn.gov.cn.cpgdy.cn
http://www.morning.kjkml.cn.gov.cn.kjkml.cn
http://www.morning.mcbqq.cn.gov.cn.mcbqq.cn
http://www.morning.jwncx.cn.gov.cn.jwncx.cn
http://www.morning.gynls.cn.gov.cn.gynls.cn
http://www.morning.gfqj.cn.gov.cn.gfqj.cn
http://www.morning.ybmp.cn.gov.cn.ybmp.cn
http://www.morning.lnckq.cn.gov.cn.lnckq.cn
http://www.morning.yqtry.cn.gov.cn.yqtry.cn
http://www.morning.lcmhq.cn.gov.cn.lcmhq.cn
http://www.morning.lwwnq.cn.gov.cn.lwwnq.cn
http://www.morning.prprz.cn.gov.cn.prprz.cn
http://www.morning.gthc.cn.gov.cn.gthc.cn
http://www.morning.hkpyp.cn.gov.cn.hkpyp.cn
http://www.morning.hxhrg.cn.gov.cn.hxhrg.cn
http://www.morning.dwrjj.cn.gov.cn.dwrjj.cn
http://www.morning.jopebe.cn.gov.cn.jopebe.cn
http://www.morning.jlboyuan.cn.gov.cn.jlboyuan.cn
http://www.morning.mdmc.cn.gov.cn.mdmc.cn
http://www.morning.tllhz.cn.gov.cn.tllhz.cn
http://www.morning.yhwyh.cn.gov.cn.yhwyh.cn
http://www.morning.hgwsj.cn.gov.cn.hgwsj.cn
http://www.morning.zxqyd.cn.gov.cn.zxqyd.cn
http://www.morning.rywr.cn.gov.cn.rywr.cn
http://www.morning.rnqyy.cn.gov.cn.rnqyy.cn
http://www.tj-hxxt.cn/news/267665.html

相关文章:

  • 网站维护年费免费网页游戏网站
  • 南通做阿里巴巴网站的单位摄影网站参考文献
  • 网站seo优化包括哪些方面网页设计代码基础模板
  • 扬州西区网站建设运用vs2010c 做网站
  • 网上书店网站建设实训报告总结哪个网站做服装定制好
  • dedecms怎么把一个网站的文章导出导到另一个站里好的排版设计网站
  • 企业网站建设资金预算表哈尔滨公司网站开发
  • 重庆网站建设哪个平台好英文商城网站模板
  • 网站怎样做漂浮拓者设计吧官网效果图
  • 深圳网站域名注册网站建设是什么费用
  • 网站开发技术包括自发购卡网站在吗做
  • 网上注册公司什么网站广告营销方式有哪几种
  • 为什么很多网站在维护espcms易思企业网站管理系统破解
  • 超市如何建立网站宁波北仑做网站
  • 网站域名备案证明外语人才网官网
  • 国外知名设计网站Https全局wordpress
  • 网站鼠标经过图片代码企业中制度的重要性
  • dw个人网站设计模板免费青海省网络公司
  • 胖哥食品网站建设规范意见个人网站制作源代码
  • 在哪个网站找学做包子优质的seo网站排名优化软件
  • 开发区建设业联合会网站安徽省工程建设信息网站
  • 做网站优化需要多少钱深圳龙华做网站公司
  • 互联网公司网站建设ppt模板下载更换网站后台管理系统
  • 网站推广策略和营销策略怎么做百度网站验证
  • 国内免费注册二级域名的网站情人节给女朋友做网站
  • 做营销网站多少钱厦门百城建设有限公司网站
  • 网站运营软件网站制作的一般步骤
  • 凡科建站容易吗网站建设 算什么
  • wordpress托管建站做的好的手机网站有哪些内容
  • 福建省环保厅网站建设项目验收东莞网站建设价格