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

如何做产品展示网站中国建筑网官网手机版

如何做产品展示网站,中国建筑网官网手机版,建立网站的平台,wordpress注册登陆起因 在一个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.hkea.cn/news/14407468/

相关文章:

  • 千图主站的功能介绍动态可视化wps图表制作
  • 医疗器械查询官网南京网络推广优化哪家好
  • 2016企业网站建设合同wordpress双语安装
  • 怎么关键词优化网站山西孝义网站开发
  • 建设电商网站的个人心得网站建设与管理教学大纲
  • 为什么买的网站模版不好用网红营销套路
  • 郑州云拓网站建设公司wordpress钩子自定义钩子
  • 个人网站免费的吗网页设计图片的代码
  • 广州广州网站建设公司网站域名到期查询
  • 网站推广的主要方法重庆网站建设去迅法网
  • 怎么管理网站添加代码威海制作网站
  • 青岛建网站公司哪家专业设计网站需要多少钱
  • 网站维护要求网站开发工作描述
  • 仿站小工具wordpress网站推广公司
  • 做网站用那一种语言最好品牌网站制作报价表
  • 问卷调查网站哪个好自己电脑做服务器上传网站 需要备案吗
  • 公众号平台登陆入口seo在线教程
  • 天津营销网站建设公司排名wordpress 获取评论
  • 南平建设集团网站经常访问的网站来打不开
  • 东莞企业网站制作怎么做自己如何创立网站
  • 新公司的公司简介怎么写南宁百度推广排名优化
  • 一个虚拟主机空间挂两个网站多语言网站建设公司
  • 网站该怎么做链接外贸营销邮件主题一般怎么写
  • 微信营销软件功能郑州seo优化服务
  • 网站html5自适应wordpress apache 配置
  • 网站产品使用说明书怎么做设计公司企业价值观
  • 做设计有必要买素材网站会员吗网站优化排名查询
  • 百度推广是必须先做网站吗郑州加盟网站建设
  • 重庆网站建设技术支持重庆互联网源码网站开发
  • wordpress 文章 相册个人网站seo