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

学校网站建设电话网站怎么做推广知乎

学校网站建设电话,网站怎么做推广知乎,福建工程建设管理中心网站,vs手表官网最近不是在救火#xff0c;就是在救火的路上。 也没什么特别可写的#xff0c;今天记录下最近遇到的一个问题#xff0c;个人觉得挺有意思#xff0c; 待有缘人阅读 言归正传#xff0c;售后反馈#xff1a; 营业查询中付款方式为第三方支付的几条银行缴费#xff0c;创… 最近不是在救火就是在救火的路上。 也没什么特别可写的今天记录下最近遇到的一个问题个人觉得挺有意思 待有缘人阅读 言归正传售后反馈 营业查询中付款方式为第三方支付的几条银行缴费创建操作员和修改操作员为系统操作员系统操作员一般只用于系统配置不会用于处理业务 这类异常数据会导致月底与财务报表不正确 看到这个问题的时候第一感觉就是有点蒙 在我们的系统中的配置操作员和业务操作员是分开的。银行缴费的操作员记录的是指定的业务操作员 查看系统日志发现日志中有问题交易流水120231116205337hF544的记录信息 从日志分析问题数据不是通过客户充值产生的数据而是银行对账产生的数据。 所谓对账就是指本系统的缴费和银行系统的缴费做对比对方有我方没有则补数据对方没有我方有则冲正数据 双方都有则按照银行的数据修复成一直。 通过日志定位问题数据都是对方有我方没有而补录的数据。 2023-11-17 09:41:00,997 INFO [com.bank.server.checkAccount.CheckAccountJob] Checking detail account... 2023-11-17 09:41:01,001 INFO [com.bank.server.checkAccount.CheckSingleContext] boss中不存在关于流水号120231116205337hF544的付款记录重做对应交易 2023-11-17 09:41:01,004 INFO [com.bank.server.checkAccount.CheckSingleContext] there is not detail that flowNo is 120231116205337hF544,transaction again 查看补录缴费程序的实现公司内部框架中的持久化处理默认会设置表数据的创建操作员operator为登录session中的操作员信息。对账是后台任务处理的后台任务没有操作员登录没有操作员登录那么肯定就没有session. 处理到这儿我开始有点儿见鬼的感觉想不明白为什么一个后台任务突然有了session有了登录信息 private static void setCreateInfo(ApplicationSession session, AbstractSystemModel entity) {Operator createOperator null;if (session null || session.getValue(operator) null) {createOperator new Operator();}else {createOperator (Operator) session.getValue(operator);}if (entity.getCreateOperator() null || entity.getCreateOperator().getId() null) {entity.setCreateOperator(createOperator);}if (entity.getCreateDate() null) {entity.setCreateDate(new Timestamp(System.currentTimeMillis()));}} 统计稽核问题数据发现后台对账任务记录信息也很奇怪有修改操作员记录的数据表示对账任务有session,没有修改操作员的记录表示此时对账任务没有session, 这个现象说明当前问题是偶然现象 当操作员登录后会在线程变量里缓存session信息用于快速获取登录信息。从上面的数据库分析执行对账的后台任务有的时候有session有的时候没有session .这个现象很像是线程变量增加session后没有清空引起的。 我们知道Jboss是通过线程池记录来减少线程的开销 难道是现场复用引起的。 我有了一个大胆的猜测 系统管理员登录后办理业务使用A线程 登录时设置了session到A线程的线程变量中系统管理员完成业务操作后因某个原因退出登录没有清空线程A的线程变量信息也就是没有清空session线程A回归线程池后再次被对账任务使用,此事后台任务从线程变量里取值就能错误获取线程变量里的记录信息 为了验证猜测我写了下面的一段测试代码模拟猜测场景。 LocalThreadTest 实现Runable接口并在其中设置一个线程变量线程池有3个线程并分配10个随机10秒的任务。 将第2个任务的线程设置一个线程变量观察第2个任务的线程被再次使用的时候线程变量是否存在 package com.thread.localthread;import java.util.Date; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;public class LocalThreadTest implements Runnable {private static final ThreadLocalString LOCAL_SESSION new ThreadLocalString();private Integer index;public LocalThreadTest(Integer i){indexi;}public static void main(String[] args) {ExecutorService fixedThreadPool Executors.newFixedThreadPool(3);for (Integer i 0; i 10; i) {fixedThreadPool .execute(new LocalThreadTest(i));}fixedThreadPool.shutdown();}Overridepublic void run() {if(index2){LOCAL_SESSION.set(session isThread.currentThread().getName());}System.out.println(LOCAL_SESSION.get());Random random new Random();int randomNumber random.nextInt(4) 1;try {Thread.sleep(randomNumber*1000);} catch (InterruptedException e) {e.printStackTrace();}} }执行结果发现和想的一样当线程回归线程池后。再次使用的时候线程变量仍会被线程持有。并不会被清除。 null null session ispool-1-thread-3 null session ispool-1-thread-3 null null查看代码还有一个疑问没有解决开启对账任务的时候是通过start()方法来启动线程的而不是run方法run()方法不会新创建线程。 如果主线程中使用ThreadLocal记录线程变量 当使用start()方法运行线程时是真正创建一个子线程。 对于线程变量ThreadLocal对象来说子线程不会持有主线程中ThreadLocal的信息。这么来看对账处理中ApplicationSession 应该也没有session才对。 public void billingServiceStart(int processInstanceId,long billingServiceInstanceId) {try {//.....略部分代码AbstractBillingServiceContext context (AbstractBillingServiceContext) BeanFactoryHolder.get().getBean(contextName);context.setBillingServiceInstance(billingServiceInstance);Thread t new Thread(context);t.start();} catch (Exception e) {logger.error(case:, e);BillingServiceInstance bsi billingServiceInstanceDao.queryBillingServiceInstance(billingServiceInstanceId);bsi.setProcessStatus(ServiceProcessStatus.ERROR_FINISHED);bsi.setInfoStr(e.toString() : e.getMessage());bsi.setEndDate(new Date());billingServiceInstanceDao.modifyBillingServiceInstance(bsi);}} 再进一步分析ApplicationSessionHolder的代码才解决了自己的疑惑。 ApplicationSessionHolder对象中使用的线程变量是InheritableThreadLocal对象InheritableThreadLocal是ThreadLocal 的子类两者的区别是InheritableThreadLocal创建时可以获取主线程的线程变量值 public final class ApplicationSessionHolder {private static final InheritableThreadLocalApplicationSessionHolder LOCAL_SESSION new InheritableThreadLocal();private boolean clear;private ApplicationSession session;private ApplicationSessionHolder(ApplicationSession session){this.session session;} } public class InheritableThreadLocalT extends ThreadLocalT {} 至此定位问题原因 第一次遇到session错乱的问题 算是涨经验了 前一篇线程池技术总结
http://www.pierceye.com/news/894600/

相关文章:

  • 公司网站开发费账务处理做图表的网站推荐
  • 网站如何做好用户体验wordpress 文章类
  • 做采集网站的方法世界四大广告公司
  • 做断桥铝窗户的网站宿州推广公司
  • 网站优化制作东莞房价一览表
  • 屏显的企业网站应该怎么做沈阳网站推广优化公司哪家好
  • 外包服务有哪些汕头seo网站建设
  • 新公司网站怎么做推广wordpress 中文 seo 插件
  • 网站建设客户分析国家企业信息公示网(广东)
  • php网站开发技术文档天津市装修公司排名榜
  • qq群优惠券里面网站怎么做的长春网站建设找源晟
  • 如何建一个公司的网站百度快速收录入口
  • 网络市场营销湘潭seo优化
  • 网站建设的模块传奇合成版2合1雷霆版手游
  • wordpress快站怎么样js网站开发视频
  • 滕州市 网站建设公司合肥网站建设方案案例
  • 外贸网站推广企业ida设计公司上海
  • 网站怎么做图片转链湄潭建设局官方网站
  • 泰州品牌网站建设二建报名时间2023年报名时间
  • 企业网站优化兴田德润怎么样wordpress标签不输出文章
  • 百度站长平台论坛永嘉网站制作
  • 月嫂公司网站建设构思免费的短视频素材库
  • 2017做哪些网站致富邢台市行政区划图
  • 深圳和海枫建设集团有限公司网站国内外基于vue框架的网站建设现状
  • 珠海免费网站制作购物网站前台模板
  • 小程序软件制作网站捷克注册公司网站
  • 做网站细节电商网站建设 平台
  • 网站建设方案书1500全国中小企业网站
  • 阳江市建设局网站合肥最新消息今天
  • 做关于什么样的网站好货代去什么网站开发客户