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

河北辛集住房和城乡建设厅网站技能培训中心网站建设

河北辛集住房和城乡建设厅网站,技能培训中心网站建设,百度移动开放平台,html页面设计工具java jpa 异步编程几年前#xff0c;在Java世界中#xff0c;几乎显而易见的是#xff0c;每个“企业”类项目都需要JPA与数据库进行通信。 JPA是Joel Spolsky描述的“ 泄漏抽象 ”的完美示例。 刚开始时很棒而又容易#xff0c;但是最后很难调整和限制。 对于许多参与数据… java jpa 异步编程 几年前在Java世界中几乎显而易见的是每个“企业”类项目都需要JPA与数据库进行通信。 JPA是Joel Spolsky描述的“ 泄漏抽象 ”的完美示例。 刚开始时很棒而又容易但是最后很难调整和限制。 对于许多参与数据访问层的后端开发人员而言日常工作是黑客并直接使用缓存刷新和本机查询。 有足够的问题和变通办法来写一本专门的书“面向黑客的JPA”但是在本文中我将仅关注并发实体处理。 让我们假设这种情况我们有一个Person实体该实体在某些业务流程中由某些服务更新。 Entity public class Person {IdGeneratedValueprivate Long id;private String uuid UUID.randomUUID().toString();private String firstName;private String lastName;// getters and setters} 为了忽略任何域的复杂性我们正在谈论更新此人的名字和姓氏。 我们可以想象代码如下 firstNameUpdater.update(personUuid, Jerry); lastNameUpdater.update(personUuid, Newman); 经过一段时间的业务决定这两个元素的更新都花了太长时间因此减少持续时间成为了头等大事。 当然有很多不同的方法可以做到这一点但让我们假设这种特殊情况并发将解决我们的难题。 这似乎很容易-只需使用Spring和voilà中的Async注释我们的服务方法即可解决问题。 真 根据乐观锁定机制的使用我们这里有两个可能的问题。 使用乐观锁定几乎可以肯定我们将从其中一种更新方法中获得OptimisticLockException-一种将排名第二的方法。 与根本不使用乐观锁定相比这种情况更好。 没有版本控制所有更新将毫无例外地完成但是从数据库加载更新的实体后我们将仅发现一个更改。 为什么会这样呢 两种方法都更新了不同的字段 为什么第二笔交易覆盖了其他更新 由于泄漏的抽象:) 我们知道Hibernate正在跟踪对我们实体所做的更改称为脏检查。 但是为了减少编译查询所需的时间默认情况下它在更新查询中包括所有字段而不是仅包含已更改的字段。 看起来很奇怪 幸运的是我们可以将Hibernate配置为以其他方式工作并根据实际更改的值生成更新查询。 可以使用DynamicUpdate批注启用它。 这可以看作是部分更新问题的解决方法但是您必须记住这是一个折衷方案。 现在此实体的每次更新都比以前更耗时。 现在让我们回到乐观锁定的情况。 坦白地说我们想要做的通常与这种锁定的想法相反这种锁定假定实体不会同时进行任何修改并且当这种情况发生时会引发异常。 现在我们肯定要进行并发修改 作为一种快速的解决方法我们可以从锁定机制中排除这两个字段 firstName和lastName 。 可以通过在每个字段上添加OptimisticLockexcluded true来实现。 现在更新名称将不会触发版本增加-它将保持不变这当然可能是造成许多麻烦且难以发现一致性问题的原因。 最后但并非最不重要的解决方案是旋转更改。 要使用它我们必须用循环包装更新逻辑当OptimisticLock发生时该逻辑在事务处理时更新。 效果越好进程中涉及的线程越少。 所有这些解决方案的源代码都可以在我的GitHub的jpa-async-examples存储库中找到 。 只是探索提交。 等待-仍然没有适当的解决方案 实际上没有。 由于使用了JPA我们对并发修改问题的简单解决方案不屑一顾。 当然我们可以重塑我们的应用程序以引入一些基于事件的方法但是上面我们仍然有JPA。 如果我们使用域驱动设计则尝试通过使用OPTIMISTIC_FORCE_INCREMENT锁定来关闭整个聚合只是为了确保更改复合实体或向集合中添加元素会更新整个聚合因为它应保护不变量。 那么为什么不使用任何直接访问工具例如JOOQ或JdbcTemplate呢 这个主意很棒但不幸的是不能与JPA同时使用。 JOOQ所做的任何修改都不会自动传播到JPA这意味着会话或缓存可能包含过时的值。 为了正确解决这种情况我们应该将此上下文提取到单独的元素中例如new table它将直接由JOOQ处理。 您可能已经注意到在SQL中进行这种并发更新非常容易 update person set first_name Jerry where uuid ?; 使用JPA抽象它变成了非常复杂的任务需要对Hibernate行为以及实现内部有深刻的了解。 综上所述我认为JPA没有遵循“React式”方法。 它是为解决某些问题而构建的但是目前我们提出了不同的问题而在许多应用程序中持久性并不是其中之一。 翻译自: https://www.javacodegeeks.com/2015/11/jpa-in-case-of-asynchronous-processing.htmljava jpa 异步编程
http://wiki.neutronadmin.com/news/15707/

相关文章:

  • 网站营销推广公司免费模板网站都有什么用
  • 2手房产App网站开发app小程序网站开发
  • 大邑做网站永康好口碑关键词优化
  • 网站规划小结涿州做网站
  • 微网站是什么意思云南信息港
  • 企业网站带后台营销推广有哪些步骤
  • 可信赖的广州做网站网店推广工作内容
  • ps切片以后 怎么做网站电子商务的网站建设过程
  • 企业网站推广方案策划专业企业网站建设定制
  • 国产做网站网络专业公司排行榜
  • 网站安全建设目的网站建设公司选哪个好
  • 潍坊网站建设招聘wordpress两个域名
  • 网站结构建设方案中山网站制
  • 线上推广的三种方式seo推广主管
  • 六安seo网站推广报价要怎么判断网站是什么cms做的
  • 网站收录平台免费logo生成器官网
  • 户外保险网站长沙网站设计开发
  • 马鞍山建设网站中国做的手机系统下载网站
  • 做网站优化最快的方式移动应用开发好就业吗
  • 深圳网站设计+建设首选深圳市微信开发在哪能看
  • 建设人才信息网是什么网站直通车怎么开效果最佳
  • 亚洲杯篮球直播在什么网站漂亮的学校网站模板下载
  • 怎么做app下载网站优化好的网站
  • 销售网站建设深圳东门买衣服攻略
  • 地方汽车网站模板购买深圳公司注销
  • 义乌外贸网站制作中国机加工订单网
  • 网站开发需求分析参考文献淘客推广效果
  • 网站套餐表格模板昌平区事业单位公共知识培训网站
  • 软件工网站开发课程设计报告扁平化配色方案网站
  • 常熟网站设计wordpress页面添加图片不显示