当前位置: 首页 > 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.pierceye.com/news/690569/

相关文章:

  • 用自己的电脑做网站需要备案吗wordpress rss教程
  • 洛阳网站搭建江西网站建设价格低
  • 戴尔网站建设的目的济宁哪里有做网站的
  • 给单位做网站需要多少钱wordpress手机编辑
  • 网站开发实验报告总结怎样搭建微网站
  • 诸暨有哪些制作网站公司代理品牌
  • jsp mysql 网站开发响应网官方网站
  • 小白网站建设教程服务器域名多少钱
  • 网站建设预付款比例网站平台建设公司经营范围
  • 付费阅读网站代码CMS源码就可以做网站吗
  • 企业网站用视频做首页wordpress 多主题插件下载
  • 阿里巴巴网官方网站新公司在哪做网站
  • 邢台专业做网站报价做一门户网站价格
  • 中山企业手机网站建设设计方案翻译
  • 江苏省品牌专业群建设专题网站wordpress 返利 插件
  • 建设部网站官网设计排版网站
  • 企业网站建设应避免数据孤岛网站建设费入何科目
  • wordpress数据量大网站访问石家庄网站建设招商
  • 公司核名在哪个网站免费申请无限流量卡
  • 做网站和网页的目的和作用是什么山西2地又检出阳性
  • 自助网站建设推广优化策略wordpress中文采集插件
  • 网站开发及运营成本做网站 公司 个体
  • 永久免费建站地址苏州h5网站建设价钱
  • 室内设计网站网站建设中请稍后再访问
  • 十堰网站开发培训编程软件手机
  • 南京网站优化推广微网站缺点
  • 大连零基础网站建设培训哪里有固安县建设局网站
  • 怎么制作网站首页培训心得体会总结简短
  • 商务网站建设 模板长春高端品牌网站建设
  • 做网站比较便宜办公资源网