当前位置: 传客网 > Postgresql支持XATransaction

Postgresql支持XATransaction

2016-12-06 作者:睁大眼睛看

    今天碰到一个问题,就是如何让我们使用的Postgresql支持分布式事务。
    我们使用的atomikos + Postgresql 9.2。 使用的配置如下:
    首先是atomikos的配置:
    <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
        <property name="forceShutdown">
            <value>true</value>
        </property>
    </bean>
    <!--        use com.atomikos.icatch.jta.UserTransactionImp as        transaction,"transactionTimeout" property should be change accord to        product environment, it defined in millisecond unit    -->
    <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
        <property name="transactionTimeout">
            <value>200</value>
            <!-- Unit of the transactionTimeout value is second-->
        </property>
    </bean>
    <!-- define JtaTransactionManager-->
    <bean id="xaTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="transactionManager">
            <ref bean="atomikosTransactionManager"/>
        </property>
        <property name="userTransaction">
            <ref bean="atomikosUserTransaction"/>
        </property>
    </bean>
    <!-- transaction proxy template -->
    <bean id="xaProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager">
            <ref bean="xaTransactionManager"/>
        </property>
        <property name="transactionAttributes">
            <props>
                <prop key="create*">PROPAGATION_REQUIRED</prop>
                <prop key="delete*">PROPAGATION_REQUIRED</prop>
                <prop key="update*">PROPAGATION_REQUIRED</prop>
                <prop key="save*">PROPAGATION_REQUIRED</prop>
                <prop key="find*">PROPAGATION_REQUIRED, readOnly</prop>
                <prop key="getCount">PROPAGATION_REQUIRED, readOnly</prop>
                <prop key="isolationLevelName">ISOLATION_READ_COMMITTED</prop>
            </props>
        </property>
    </bean>

然后是数据库的配置:

    <bean id="postgresqlDataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" destroy-method="close">
        <property name="uniqueResourceName">
            <value>postgresqlDatabase</value>
        </property>

        <property name="xaDataSourceClassName">
            <value>org.postgresql.xa.PGXADataSource</value>
        </property>

        <property name="xaProperties">
            <props>
                <prop key="databaseName">haodao</prop>
                <prop key="serverName">127.0.0.1</prop>
                <prop key="portNumber">5432</prop>
                <prop key="user">executor</prop>
                <prop key="password">test</prop>
            </props>
        </property>
       
        <!-- set properties for datasource connection pool -->
        <property name="maxPoolSize">
            <value>10</value>
        </property>
        <property name="minPoolSize">
            <value>2</value>
        </property>
        <property name="loginTimeout">
            <value>30</value>
        </property>
        <property name="reapTimeout">
            <value>20000</value>
        </property>

    </bean>



最后是DAO相关的配置:
    <bean id="postgresqlJdbcTemplate"
        class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource">
            <ref bean="postgresqlDataSource" />
        </property>
    </bean>
   
    <bean id="jdbcUserInfoDAOTarget"
        class="com.haodao.tools.dao.JdbcUserInfoDAO">
        <property name="jdbcTemplate">
            <ref bean="postgresqlJdbcTemplate" />
        </property>
    </bean>
   
    <bean id="jdbcUserInfoDAO" parent="xaProxyTemplate">
        <property name="proxyInterfaces">
            <list>
                <value>com.haodao.tools.dao.UserInfoDAO</value>
            </list>
        </property>
        <property name="target">
            <ref local="jdbcUserInfoDAOTarget" />
        </property>
    </bean>   

DAO类通过JdbcTemplate来访问数据库。

这些配置中需要注意的是使用的Postgresql的驱动的类是org.postgresql.xa.PGXADataSource, 而不是我们常用的org.postgresql.Driver。

但是这样配置之后,在测试的时候还是出现了错误,错误信息如下:
org.springframework.transaction.HeuristicCompletionException: Heuristic completion: outcome state is mixed; nested exception is javax.transaction.HeuristicMixedException: Heuristic Exception

经过一番google,才发现还需要配置一下Postgresql的配置文件。打开postgresql.conf文件,在其中找到配置项max_prepared_transactions,需要确保该配置项没有被注释掉,并且值是大于0的。配置该值后,需要重启Postgresql才能够生效。另外,配置这个值还需要注意一点,不要配置的太大。在Ubuntu 12上,我把该值配置为100后,导致Postgresql服务无法启动;修改为10之后就可以正常启动了。


相关推荐

  • wampserver xampp下PHP使用PDO 支持postgresql

    来自csdn博客的分享,首先感谢他的资源共享:百度:phppostgresqlpdo——》wampserverxampp下PHP使用PDO支持postgresql链接:http://blog.csdn.net/yageeart/articl

  • 支持蓝牙,蓝牙v2.1,支持EDR

    红外线无红外线功能数据业务EDGE,HSDPAJAVA不支持WAP上网不支持WWW浏览器支持WWW浏览器,Safari浏览器数据线支持数据线,USB2.0,3.5mm耳机接口扩展卡无扩展卡功能WiFi(WLAN)支持WiFi,支持802.1

  • 资产支持证券

    资产支持证券资产支持证券就是由特定目的信托受托机构发行的、代表特定目的信托的信托受益权份额。受托机构以信托财产为限向投资机构承担支付资产支持证券收益的义务。资产支持证券(Asset-BackedSecurity,以下简称ABS),是一种债券

  • 转向收入支持

    扑克导读美国的农业补贴逐步由以价格支持为主转向以收入支持为主。近年来,美国在农业补贴政策上注重发挥市场机制的导向作用,传统的以目标价格、保护价格、贷款差额支付为主的价格支持政策,逐渐转向以直接收入支付、反周期支付等为主的收入支持政策。这篇文

  • Android Native IPC 方案支持情况

    1、Binder-不支持Native层的binder2、内存共享-不支持3、信号量(信号灯)-不支持4、消息队列-不支持5、信号-支持,但是不能用sigqueue传消息,只能用来安装信号,可以用来收集NativeCrash日志6、管道-匿名

  • 95epay支持多卡种、多币种、多网店系统、多支付语言?

    支持多卡种、多币种、多网店系统、多支付语言?95epay支持五种卡:Visa、MasterCard、AmericanExpress、JCBBrand、DinersCard95epay通道支持币种:目前我们支持:美元、欧元、英镑、日元、新加坡

  • 安倍内閣 支持する47% 支持しない39%

    安倍内閣支持する47%支持しない39%11月9日19時00分NHKの世論調査によりますと、安倍内閣を「支持する」と答えた人は、先月より4ポイント上がって47%、「支持しない」と答えた人は、1ポイント下がって39%でした。NHKは、今月6日か

  • 河北瀚迪对特付宝pos机代理的十大支持

    1.对经销商进行系统性行业培训及业务拓展指导支持。2.对经销商销售人员进行能力提升专项培训及产品实操培训支持。3、对经销商负责区域招商人员进行招商工作系统性专项培训支持。网络推广支持4.产品品牌区域性网络推广指导支持。5、产品品牌全国性网络

  • 在美国:特朗普创新高的支持率 -53%!

    在共和党支持者的投票中,特朗普的支持率创了新高--53%,这个数据要比党内其他竞争者的总和还多。同样,特朗普在民主党内支持者受欢迎比例也是最高的,数据显示被调查者中66%的人对特朗普持肯定的态度,比其他候选者都要高。并且,75%的共和党投票

  • 请问如何让apache支持php-

    请问如何让apache支持php?需要模块吗请问如何让apache支持php?首先,Apache要支持DSO再编译安装PHP时,带上一个参数就可以了。请问如何让apache支持php?你说的太对了,我现在编译的时候是这样的过程:./conf

  • NewBlue Titler Pro For Windows -111223 支持众多软件的字幕插件

    本插件支持Vegasx86/x64,且包含DX与OFX两种架构,可自行选择。本插件支持Edius6.支持PR。支持AvidMediaComposer软件下载地址:http://d.1tpan.com/tp0352610014

  • IE6不支持hover赋予css样式的解决方法 如div:hover li:hover支持

    一般对div选择器样式设置:hoverie6浏览器不支持,如li:hoverimg:hover.abc:hover非a链接标签设置hover其ie6均不支持,这里为大家整理完美兼容让ie6支持hover赋予css样式。扩展阅读:1、cssa

  • Windows XP 国际化支持概述

    WindowsXP国际化支持概述利用内置的对60余种脚本、数百种语言以及126个区域设置的支持,每种语言版本(和各种类型)的Windows2000均提供了前所未有的国际化和多语言计算支持。最重要的是,Windows2000的国际化功能集通过

  • 愤怒控告:法院支持劳改刑满释分子剥削我19年,不付报酬错误判决!_...

    愤怒控告:法院支持劳改刑满释分子剥削我19年,不付报酬错误判决!_...时间:全部全部1天内1周内1月内3月内1年内愤怒控告:法院支持劳改刑满释分子剥削我19年,不付报酬错误判决!_...2013年愤怒控告:法院支持劳改刑满释分子剥削我19

  • 图片自由分享——18个免费支持外链的相册空间

    网络上免费相册服务多如牛毛,其中支持图片外链的也很多。本文就为你收集了18个支持图片外链的免费相册。国内:POCO——免费无限相册空间支持外链POCO提供免费无限容量的相册空间,上传的图片支持外链(图片上传后会提供图片的URL),方便分享。

  • 2010-11, 第四期, Power&存储 产品技术支持信息周报

    2010-11,第四期,Power&存储产品技术支持信息周报一.Power720支持的PCI槽位信息:解答:Power720默认支持4个PCIe的槽位,可以支持普通的PCIe的卡。可以通过内置的PCI扩展柜:fc#5610(PCIe

  • 光泽裤现货 支持一件代发微信yr13610681033

    光泽裤现货支持一件代发微信yr13610681033光泽裤现货支持一件代发微信yr13610681033光泽裤现货支持一件代发微信yr13610681033去年冬天,光泽裤,条纹裤,被微商们卖的非常火爆,到最后,地摊也开始做光泽裤,利润大,

  • [置顶](转)用Scintilla让程序支持语法高亮并且编译

      用Scintilla让程序支持语法高亮  来自  用Scintilla让程序支持语法高亮  Scintilla的高级技法  Scintilla是一个免费、跨平台、支持语法高亮的编辑控件。它完整支持源代码的编辑和调试,包括语法高亮、错误指

  • 让你的APP支持spotlight搜索

    iOS9中支持为app中的内容做索引以支持spotlight搜索,感觉是个很有心意的功能。需要提到的是这些索引是存在本地设备中的,不会同步到icloud中,更换了设备就没有了。效果就是这样:创建支持搜索的内容支持搜索的内容的类是CSSear

  • ic卡读写器支持PPS协议和参数选择

      ic卡读写器支持非接触式读写器功能  支持非接触式智能卡;  内置天线;  支持常用的符合ISO14443标准的A和B类智能卡  如ST卡:ST176,SRIX512,SRIX4K  遵循T=CL协议,支持MifareClassics的

返回
顶部