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

让人家做网站需要问什么问题模板网站免费

让人家做网站需要问什么问题,模板网站免费,nba网站制作,武汉做网站最牛的公司起因 在一个service方法上使用的事务,其中有方法是调用的多数据源orderDB 但是多数据源没有生效,而是使用的primaryDB 原因 spring 事务实现的方式 以 Transactional 注解为例 (也可以看 TransactionTemplate, 这个流程更简单一点)。 入口:ProxyTransa…

起因

在一个service方法上使用的事务,其中有方法是调用的多数据源orderDB

image.png
image.png
image.png
image.png

但是多数据源没有生效,而是使用的primaryDB

image.png

原因

spring 事务实现的方式

@Transactional 注解为例 (也可以看 TransactionTemplate, 这个流程更简单一点)。
入口:ProxyTransactionManagementConfiguration
(从 config 类入手,需要哪些bean一目了然,然后直接顺着看下去就可以了)
主要有以下3个bean

  • TransactionAttri``buteSource:实现是 AnnotationTransactionAttributeSource, 提供从(存在 @Transactional 注解的)方法上读取事务的属性(注解的属性)的功能
  • TransactionInterceptor:事务方法拦截器的bean,在执行事务方法时,转到 (TransactionAspectSupport#invokeWithinTransaction) 方法,即spring事务处理的主要逻辑。
  • BeanFactoryTransactionAttributeSourceAdvisor:一个advisor(包含一个 Pointcut 切点和一个 Advice 通知),advice就是上面的事务拦截器,Pointcut 切点匹配能通过 TransactionAttributeSource 获取到事务信息的方法。

拦截器逻辑大概如下:
image.png

解决方案

每个数据源手动配置SqlSessionFactory

这种方式是通过手动声明创建orm框架对应的bean来实现多数据源的操作,即每个数据源都自己手动创建一套对用的bean。
不支持多个数据源事务,手动配置较繁琐
(如果使用的spring而不是springboot的话,就不会有这种多数据源的疑问,因为本来就要自己声明bean)

动态数据源(本次使用)

只需要把@Transactional(rollbackFor = Exception.class) 换为@DSTransactional即可
并且抛出异常事务也会回滚

image.png

动态数据源实现原理

同样看一下 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, 内部维护一个 ThreadLocal<Map>, 同时会 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.ds6.com.cn/news/89587.html

相关文章:

  • 心理咨询中心网站模板互联网营销方式
  • 服装网站设计又有什么新病毒出现了
  • 做守望同人的网站冯耀宗seo课程
  • wordpress模板带后台百度网站优化方案
  • 网站单选框的实现软文代发平台
  • Wordpress 修改 mysql 插件江北seo综合优化外包
  • 网站的登录注册怎么做外贸平台
  • 在家做任务赚钱网站成都最新数据消息
  • 罗湖做网站多少钱qq刷赞网站推广快速
  • 成都建立网站的公司石家庄seo网站排名
  • 网站域名后缀代表什么意思关键词林俊杰mp3在线听
  • 网站子目录绑定二级域名铁力seo
  • 做网站菜单背景图片专业软文发稿平台
  • ui设计与制作seo博客模板
  • 聊天app推广代理网络优化软件有哪些
  • 怎么外贸网站推广谷歌搜索引擎免费入口 台湾
  • ofbiz 做的知名网站百度一下知道官网
  • 做网站 租服务器吗合肥百度seo排名
  • 做百科需要发哪些网站seo在线排名优化
  • 购物网站建设策划报告网站维护推广的方案
  • 张家界做旅游网站百度推广seo是什么意思
  • 新网站注册长沙网站seo方法
  • 运动鞋网站的建设风格怎么在百度上做广告推广
  • 品牌设计公司50强搜索优化推广公司
  • 网页在线小游戏刘连康seo培训哪家强
  • 企业为什么建站谷歌浏览器 安卓下载
  • 怎样创建行业门户网站b2b网站推广优化
  • 做房地产需要做网站吗seo关键词排名优化怎么样
  • 网站设计建设合同拼多多关键词排名查询工具
  • 中国做乱的小说网站怎么宣传自己的产品