首页 > 其他分享 >seata学习-数据源代理

seata学习-数据源代理

时间:2023-08-17 17:11:16浏览次数:38  
标签:seata spring 代理 DataSource 数据源 SeataAutoDataSourceProxyCreator public

代理的动机

AT 模式下

  • 执行 undo-log 回滚日志

代理的是 DateSource 这个类

手动代理

即手动注入一个DataSourceProxy,如下

@Bean
public DataSource druidDataSource() {
    return new DruidDataSource()
}


// 这里会返回名字为 "dataSource" 的 Bean, 这里
@Primary
@Bean("dataSource")
public DataSourceProxy dataSource(DataSource druidDataSource) {
    return new DataSourceProxy(druidDataSource);
}

即使在生成这个类的时候,手动返回一个 proxy

自动代理

针对DataSource创建一个代理类,在代理类里面基于DataSource获取DataSourceProxy(如果没有就创建),然后调用DataSourceProxy的相关方法。核心逻辑在SeataAutoDataSourceProxyCreator

public class SeataAutoDataSourceProxyCreator extends AbstractAutoProxyCreator {
    ... 
}

其中 AbstractAutoProxyCreator 来自 spring-aop

其他 : 自动代理是如何调用的呢 ?

本人的项目是 spring cloud 的依赖如下

        <!-- 阿里相关依赖 -->
        <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>io.seata</groupId>
                    <artifactId>seata-spring-boot-starter</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

这里使用的 seata 版本是 1.7 , 之前用 1.6 以及 1.4 有很多 bug , 从官网可以看到 1.7作为一个大版本更新 ,更新了很多bug提升了性能.

回到上面的问题 : 自动代理是如何调用的呢 ?
即是 SeataAutoDataSourceProxyCreator 是如何给调用的呢 ? 在 seata-spring-boot-starter 这里依赖里面有一个 SeataDataSourceAutoConfiguration , 该类将会引入 SeataAutoDataSourceProxyCreator 完成代理 .

@ConditionalOnBean({DataSource.class})
@ConditionalOnExpression("${seata.enabled:true} && ${seata.enableAutoDataSourceProxy:true} && ${seata.enable-auto-data-source-proxy:true}")
@AutoConfigureOrder(2147483647)
@AutoConfigureAfter(
    value = {SeataCoreAutoConfiguration.class},
    name = {"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration"}
)
public class SeataDataSourceAutoConfiguration {
    public SeataDataSourceAutoConfiguration() {
    }


    // 这里注入的
    @Bean({"seataAutoDataSourceProxyCreator"})
    @ConditionalOnMissingBean({SeataAutoDataSourceProxyCreator.class})
    public static SeataAutoDataSourceProxyCreator seataAutoDataSourceProxyCreator(SeataProperties seataProperties) {
        return new SeataAutoDataSourceProxyCreator(seataProperties.isUseJdkProxy(), seataProperties.getExcludesForAutoProxying(), seataProperties.getDataSourceProxyMode());
    }
}

参考资料

标签:seata,spring,代理,DataSource,数据源,SeataAutoDataSourceProxyCreator,public
From: https://www.cnblogs.com/Benjious/p/17638186.html

相关文章

  • 跨界电商战略中的Socks5代理与数据抓取
    一、跨界电商:商机与挑战并存随着全球化浪潮的推动,跨界电商成为了企业拓展全球市场的重要策略之一。然而,跨界电商在面对多样性的市场、数据采集以及网络安全等问题时,也面临着一系列的挑战。二、Socks5代理:数据抓取的得力工具Socks5代理的工作原理与特点:Socks5代理不仅支持TCP和UDP协......
  • 爬虫隧道代理设置多久换一次更合适?
    今天我们来分享的内容是,爬虫隧道代理设置多久换一次比较好的问题!让我们一起来探讨,为你的爬虫工作增添一份稳定与流畅!在爬虫过程中,设置隧道代理是一种常见的需求,它可以帮助我们隐藏真实的IP地址,通过更换代理IP来规避目标网站的访问限制。但是,隧道代理的更换频率也是一个关键......
  • 爬虫设置代理服务器和端口:轻松搞定网络爬虫的必备技巧!
    亲爱的爬虫爱好者,咱们在网络爬虫之旅中,设置代理服务器和端口是必不可少的一环。今天,作为一名http代理产品供应商,我将与你分享如何轻松地设置代理服务器和端口,助你在爬虫世界中获得更高的成功率。一、为什么要设置代理服务器和端口?在进行网络爬虫时,有些网站对频繁的请求......
  • (随笔)静态代理和动态代理
    静态代理:在编译阶段就已经确定代理类和真实对象的关系。代理类需要手动编写或生成,为每个真实对象单独创建一个代理类。在代理类中可以添加额外的逻辑,如校验、日志等,增强功能。维护需对代理类和真实对象的修改,增加代码维护成本。在代理类和真实对象之间存在静态关联。动态......
  • 高效的HTTP代理,python如何助力
    在使用Python编写高效的HTTP代理时,可以采用以下一些小技巧来提升性能和效率:1、使用异步请求库:使用异步的HTTP请求库,如aiohttp或httpx,可以实现并发处理多个请求,提高代理的吞吐量和响应速度。2、复用连接:在处理多个请求时,尽量复用已建立的连接,而不是每次请求都创建新的连接。这可以通......
  • 代理IP中的账密提取和API提取是什么意思?
    在代理IP服务中,账密提取和API提取是两种常见的方式,用于获取和使用代理IP。账密提取:账密提取是指从代理IP服务提供商获取包含账户和密码的白名单。用户通过购买或订阅的方式获得账密白名单,其中包含了多个可用的代理IP账户和相应的密码。使用账密提取的方式,用户需要手动提取账户和密......
  • [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
    1.今天开发了一套服务程序,使用的是Odbc连接momhistory.在我本机用VS打开程序时,访问一切正常,当发布出来装在电脑上,连接momhistory时提示:[Microsoft][ODBC驱动程序管理器]未发现数据源名称并且未指定默认驱动程序 2.检查ODBC数据源配置时感觉也没啥问题。3.发现“要用......
  • 独立站与代理IP:打造稳定安全的网站环境
    互联网的发展日新月异,现如今,越来越多的企业和个人通过搭建独立站的方式来展示自己的品牌和内容。独立站的优势是具有灵活性和自主性,但同时也需要面对网络安全和稳定性的挑战。在这个时候,代理IP的作用变得尤为重要,它可以帮助独立站构建一个稳定安全的网站环境。首先,代理IP可以提供更......
  • Socks5代理:跨界电商之路的智能引路者与隐私守护者
    一、Socks5代理:工作原理与技术特点Socks5代理(SK5代理):Socks5代理是IP代理的进阶版,采用SOCKS5协议。相比传统IP代理,它不仅支持TCP和UDP协议,还具备更强大的数据传输和隐私保护能力。工作原理:当用户访问目标服务器时,请求首先经过Socks5代理服务器,代理服务器隐藏了用户的真实IP地址,将请......
  • GIt设置代理
    GIt设置代理GIt需要设置代理,才能正常访问github等网站设置如下(可复制):gitconfig--globalhttps.proxyhttp://127.0.0.1:1080gitconfig--globalhttps.proxyhttps://127.0.0.1:1080gitconfig--globalhttp.proxy'socks5://127.0.0.1:1080'gitconfig--globalhttps......