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

正规网站建设费用百度网盘链接

正规网站建设费用,百度网盘链接,可以做点赞的网站赚钱,北京网站系统开发百度都百度不到jpa多线程的事务回滚,废话少说,就是干, 实现思路(可看可不看,本人也不喜欢罗里吧嗦的,想直接看干货就跳过这里,直接执行代码): jpa本身是不支持多线程事务…

百度都百度不到jpa多线程的事务回滚,废话少说,就是干,

实现思路(可看可不看,本人也不喜欢罗里吧嗦的,想直接看干货就跳过这里,直接执行代码):

jpa本身是不支持多线程事务,所以要手动实现事务的提交和回滚,网上可参考的太复杂,而且没用的太多,自己干吧,

首先,排除一般的影响事务回滚的条件(jpa事务失效的 场景),事务回滚的前提就是同一个连接,统一提交事务,
但是多线程,是多个实例,都不是同一个连接,自然不能统一回滚了,

实现思路:想要实现统一的管理,就要共享同一个事务,同一个connection,我们只能手动管理主线程和子线程,所以要共享EntityManager和EntityTransaction,
需要注意的是不能直接在方法外来初始化EntityManager和EntityTransaction,会报错,通过请求,再获取对象,赋值就可以了
通过内部类,来共享这两个对象,就实现了两个测试的内部类,Thread1和Thread2,
然后通过线程池,来执行多个线程,需要注意的就是,要确定子线程都执行完毕了,再提交事务,不然的话,子线程还在执行,主线程就提交了事务,多线程事务就没法生效
代码都经过测试,直接复制粘贴,代入自己数据源测试就知道了

代码实例

	/*** 注入EntityManager实例*/@Autowiredprivate EntityManagerFactory entityManagerFactory;//作为多线程的事务共享,从而统一提交或回滚,不能在这里直接createEntityManager和getTransactionEntityManager entityManager;EntityTransaction transaction;//测试方法@ResponseBody@RequestMapping(value = "/test")public RetMsgBean testThread() throws Exception {//请求的时候给实例和事务赋值entityManager = entityManagerFactory.createEntityManager();transaction = entityManager.getTransaction();try {//开始事务transaction.begin();//执行插入数据操作Query query = entityManager.createNativeQuery("insert into pt_business_logs(id) value (?)");//传入参数query.setParameter(1,"11111");//提交数据库query.executeUpdate();//创建线程池ExecutorService service= Executors.newFixedThreadPool(10);//执行事务service.execute(new Thread1());//执行事务service.execute(new Thread2());//结束线程池service.shutdown();/*** 线程没有结束,就等待500毫秒,可以随意调整等待时间,反正就是要等子线程执行完,* 不等子线程的话,子线程还在执行,主线程有可能就直接进行commit操作了,多线程事务回滚就无法生效了*/while (!service.isTerminated()) {Thread.sleep(500);System.out.println("等待子线程执行");}//事务执行完成的提示System.out.println("提交事务");//提交事务transaction.commit();} catch (Exception e) {//发生异常进行回滚,主线程的回滚不能控制子线程,只是针对主线程的异常if (transaction != null) {transaction.rollback();}e.printStackTrace();System.out.println("发生异常");}finally {entityManager.close();}//RetMsgBean无所谓,这是一个自定义的返回值类return RetMsgBean.init();}//内部类,线程1,通过继承Runnable实现
class Thread1 implements Runnable{@Overridepublic void run() {try {//执行数据库操作Query query = entityManager.createNativeQuery("insert into pt_business_logs(id) value (?)");query.setParameter(1,"222222");query.executeUpdate();//故意抛出异常System.out.println(1/0);} catch (Exception e) {e.printStackTrace();//进行回滚transaction.rollback();}}
}//内部类,线程2,通过继承Runnable实现
class Thread2 implements Runnable{@Overridepublic void run() {try {Query query = entityManager.createNativeQuery("insert into pt_business_logs(id) value (?)");query.setParameter(1,"333333");query.executeUpdate();} catch (Exception e) {e.printStackTrace();transaction.rollback();}}
}
http://www.tj-hxxt.cn/news/48391.html

相关文章:

  • 做pc网站广东seo快速排名
  • 内蒙古兴安盟建设局网站网站怎么收录到百度
  • 营销策划与运营方案怎么写seo站长工具查询系统
  • 渭南网站建设网站建设什么是sem
  • wordpress打不开仪表盘seo优化专员工作内容
  • 做代金券的网站深圳货拉拉
  • 做cf网站什么是网站优化
  • 私密浏览器如何下载视频苏州关键词seo排名
  • 网站开发微信支付详细教程淘宝流量助手平台
  • 做一手房用什么网站好如何制作自己的网址
  • 做外贸网站买海外域名pc网站优化排名
  • 北京医疗网站建设现在比较好的营销平台
  • 沈阳市做网站电话什么是市场营销
  • wordpress主题神级淄博seo培训
  • 做彩铃网站自媒体135网站免费下载安装
  • 网站建设栏目企业培训内容
  • 口碑好的常州网站优化cfa一级看多久两分钟
  • 私人网站如何做竞价百度号码认证平台官网
  • 建设网站服务器自营方式的特点青海网站seo
  • 网站改版 被k二十条优化措施
  • 网站制作涉及的法律镇江搜索优化技巧
  • 做网站为什么很复杂google入口
  • 工商变更网上办理流程seo排名哪家有名
  • 义乌seo推广百度快速优化软件
  • 中国建设网官方网站济宁国泰广州谷歌seo
  • 如何做论坛网站私密浏览器免费版
  • 帮人做网站一个多少钱自己开发网站
  • 做教育培训网站的公司品牌传播策略
  • 要是360网站不安全怎么做班级优化大师app下载
  • 成都seo网站开发考拉seo