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

常见的cms网站旅游网站建设的目标是什么意思

常见的cms网站,旅游网站建设的目标是什么意思,宣传片素材网站,人力外包和项目外包哪个好起因 在一个service方法上使用的事务,其中有方法是调用的多数据源orderDB 但是多数据源没有生效,而是使用的primaryDB 原因 spring 事务实现的方式 以 Transactional 注解为例 (也可以看 TransactionTemplate#xff0c; 这个流程更简单一点)。 入口#xff1a;ProxyTransa…起因 在一个service方法上使用的事务,其中有方法是调用的多数据源orderDB 但是多数据源没有生效,而是使用的primaryDB 原因 spring 事务实现的方式 以 Transactional 注解为例 (也可以看 TransactionTemplate 这个流程更简单一点)。 入口ProxyTransactionManagementConfiguration 从 config 类入手需要哪些bean一目了然然后直接顺着看下去就可以了 主要有以下3个bean TransactionAttributeSource实现是 AnnotationTransactionAttributeSource 提供从存在 Transactional 注解的方法上读取事务的属性注解的属性的功能TransactionInterceptor事务方法拦截器的bean在执行事务方法时转到 (TransactionAspectSupport#invokeWithinTransaction) 方法即spring事务处理的主要逻辑。BeanFactoryTransactionAttributeSourceAdvisor一个advisor包含一个 Pointcut 切点和一个 Advice 通知advice就是上面的事务拦截器Pointcut 切点匹配能通过 TransactionAttributeSource 获取到事务信息的方法。 拦截器逻辑大概如下: 解决方案 每个数据源手动配置SqlSessionFactory 这种方式是通过手动声明创建orm框架对应的bean来实现多数据源的操作即每个数据源都自己手动创建一套对用的bean。 不支持多个数据源事务手动配置较繁琐 (如果使用的spring而不是springboot的话就不会有这种多数据源的疑问因为本来就要自己声明bean) 动态数据源(本次使用) 只需要把Transactional(rollbackFor Exception.class) 换为DSTransactional即可 并且抛出异常事务也会回滚 动态数据源实现原理 同样看一下 DynamicDataSourceAutoConfiguration 这个配置相关的类就大概了解了。 DynamicRoutingDataSource: 动态数据源内部使用 Map 保存了多个数据源。获取 connection 时根据 ThreadLocal 中的 dsKey 获取对应的数据源 另对于多数据源事务 TransactionContext.getXID() isNotEmpty会返回一个 ConnectionProxy 并暂存到 ConnectionFactory 中 该 ConnectionProxy 不会执行 commit、rollback、close 操作事务相关的方法。 public Connection getConnection() throws SQLException {String xid TransactionContext.getXID();if (StringUtils.isEmpty(xid)) {// 非多数据源事务直接获取对应 connectionreturn determineDataSource().getConnection();} else {String ds DynamicDataSourceContextHolder.peek();ds StringUtils.isEmpty(ds) ? default : ds;// 多数据源事务使用代理的 connection (屏蔽了 commit 等操作)ConnectionProxy connection ConnectionFactory.getConnection(ds);return connection null ? getConnectionProxy(ds, determineDataSource().getConnection()) : connection;} }// 获取 代理的 connection 并将其存入 ConnectionFactory 内部维护一个 ThreadLocalMap 同时会 setAutoCommit(false) 开启事务 private Connection getConnectionProxy(String ds, Connection connection) {ConnectionProxy connectionProxy new ConnectionProxy(connection, ds);ConnectionFactory.putConnection(ds, connectionProxy);return connectionProxy; }// DynamicRoutingDataSource // 从 ThreadLocal 获取当前 dsKey 然后获取对应 datasource public DataSource determineDataSource() {String dsKey DynamicDataSourceContextHolder.peek();return getDataSource(dsKey); }DynamicDataSourceAnnotationInterceptor: 处理 DS 注解的拦截器获取 DS 指定的 datasource 并存入 ThreadLocal 中 供 DynamicRoutingDataSource 使用dynamicTransactionAdvisor: 处理 DSTransactional 多数据源事务注解的拦截器在执行目标方法前标记为多数据源事务 (TransactionContext.bind(xid)) 执行完后 通知 ConnectionFactory 中的 connectionProxy 进行事务的 commit 或 rollback。 // DynamicLocalTransactionAdvisor public Object invoke(MethodInvocation methodInvocation) throws Throwable {if (!StringUtils.isEmpty(TransactionContext.getXID())) {return methodInvocation.proceed();}// 事务是否成功boolean state true;Object o;String xid UUID.randomUUID().toString();// 标记当前为 多数据源事务TransactionContext.bind(xid);try {o methodInvocation.proceed();} catch (Exception e) {state false;throw e;} finally {// 通知 connectionProxy 进行 commit 或 rollbackConnectionFactory.notify(state);TransactionContext.remove();}return o; }
http://www.zqtcl.cn/news/690569/

相关文章:

  • 站长工具seo优化建议微信小程序线上商城怎么申请
  • 建筑网站开发设计做网站的公司msgg
  • 设计师个人网站模板网站的尾页要怎么做
  • 营销型网站建设风格设定包括哪些方面wordpress企业魔板
  • 怎样做淘客网站做绿色产品的网站
  • 关于网站建设的通知wordpress点注册后一直不出来
  • 科技公司网站设计方案开发公司绩效考核
  • 深圳网站建设推进旗县政务网站建设工作方案
  • 南宁 网站建设网站集约建设
  • 做网站编辑好吗吉林省四平市
  • 石家庄网站制作最新军事新闻最新消息视频
  • 高端品牌网站设计企业网站建设wordpress文章前阅读
  • 广州做网站星珀各电商网站的特点
  • 西安模板做网站广州微信网站建设平台
  • 网站开发硬件工程师待遇微信商城有哪些第三方平台
  • 基于响应式设计的网站建设软件开发项目甘特图
  • 绍兴兴住房和城乡建设局网站网站更换名称需要重新备案吗
  • 跨境电商网站开发文档网站建设费可摊几年
  • 怎样建设一个游戏网站随便玩玩在线制作网站
  • 免费的成品网站用织梦模板做网站
  • 彩票网站开发 极云有的域名怎样做网站
  • 网店运营推广网站买个天猫店多少钱一个
  • 资讯网站排版广告公司取名大全集
  • 织梦网站seo安徽建设厅网站
  • 北京智能模板建站如何增加网站的索引量
  • 哪个网站专做进口商品的网站备案好麻烦
  • 南京网站制作哪家专业接口网站开发
  • 网站正在建设中9797鲜花网页设计模板
  • wordpress怎么自动更新网站地图现在最流行的网站开发工具
  • 科技局网站查新怎么做vs网站制作教程