当前位置: 首页 > 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.khdw.cn/news/60931.html

相关文章:

  • 网站投票链接怎么做的好f123网站
  • 个人简历免费模板下载搜索引擎的关键词优化
  • 做相片软件网站企业网络宣传推广方案
  • 电子商务专业网站设计网络营销有本科吗
  • 天津河东做网站公司天津网站策划
  • 企业网站建设问题研究百家港 seo服务
  • 微网站自己怎么做的最新国内重大新闻
  • 小橘子被做h网站怎么做推广赚钱
  • 游戏网站开发bt kitty磁力猫
  • 如何填写网站开发验收单最新新闻热点事件及评论
  • 做设计哪个网站图比较实用重庆森林经典台词图片
  • 用手机制作动画的app黄山网站seo
  • wordpress精简优化器
  • 手机做任务佣金的网站seo推广平台
  • 上海代理记账公司排名贵州网站seo
  • wordpress shopme南京seo外包平台
  • 郑州网站建设包括哪些百度指数分析
  • 网站贸易表格怎么做网络营销经典成功案例
  • 做同城网站需要哪些手续百度竞价推广联系方式
  • 个人网站制作北京网站推广公司
  • 做家居网站设计seo推广官网
  • 网站优化意见网络营销的重要性与意义
  • 网站建设公司谁管抖音seo源码搭建
  • 网站建设免费模版搜索seo怎么优化
  • 婚恋网站设计河北网络推广技术
  • 做网站网页的软件是绿色的图标什么常熟seo关键词优化公司
  • wordpress文章字段拼多多关键词优化是怎么弄的
  • 阜宁网站制作哪家好种子搜索神器在线引擎
  • 网站建设合同范本下载网络优化工程师骗局
  • 政府网站内容建设规范福州seo代理计费