在HA模式下使用Postgresql JDBC驱动程序配置xa-datasource(Wildfly)
问题描述:
经过多次尝试,看起来组合xa-datasource < - > postgres驱动程序不支持具有非默认端口(5432)的故障转移配置。 我想,驱动程序不会实现xa所期望的所有方法。在HA模式下使用Postgresql JDBC驱动程序配置xa-datasource(Wildfly)
我会很高兴,如果有人能告诉我,我错了......
这个例子是工作,但使用默认端口:
<xa-datasource jndi-name="java:/Foo" pool-name="Foo" enabled="true" use-ccm="true" statistics-enabled="true">
<xa-datasource-property name="url">
jdbc:postgresql://server1,server2/db_name
</xa-datasource-property>
<xa-datasource-property name="ApplicationName">
MyApp
</xa-datasource-property>
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
<driver>postgresql-jdbc4</driver>
<url-delimiter>,</url-delimiter>
<xa-pool>
<min-pool-size>6</min-pool-size>
<max-pool-size>40</max-pool-size>
<prefill>true</prefill>
<is-same-rm-override>false</is-same-rm-override>
<interleaving>false</interleaving>
<pad-xid>false</pad-xid>
<wrap-xa-resource>false</wrap-xa-resource>
</xa-pool>
<security>
<user-name>foo</user-name>
<password>blah</password>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
</validation>
<timeout>
<blocking-timeout-millis>3000</blocking-timeout-millis>
<idle-timeout-minutes>60</idle-timeout-minutes>
</timeout>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</xa-datasource>
答
这可能会晚点回复,但它可能会帮助正在寻找postgres xa-datasource配置的人。 首先,您需要在Wildfly模块中安装postgre驱动程序,然后进行配置。 您可以使用子系统通过命令行进行安装,也可以将企业驱动程序的postgresql(enterprise)驱动程序名称设置为“org.edb.Driver”。使用module.xml将edb-jdbc17.jar放在WILDFLY_HOME \ modules \ system \ layers \ base \ org \ edb \ main目录下。
某些驱动程序没有在其数据源类中实现getURL()方法。所以,我们必须为它们指定不同的数据源配置。
Postgres没有getURL方法。因此,我们将在stanalone.xml/domain.xml文件中指定这样的属性。
<xa-datasource-property name="ServerName">DatabaseHostName</xa-datasource-property>
<xa-datasource-property name="PortNumber">DatabasePortName</xa-datasource-property>
<xa-datasource-property name="DatabaseName">DatabaseName</xa-datasource-property>
<xa-datasource-class>com.edb.xa.PGXADataSource</xa-datasource-class>
<driver>postgresql</driver>
<xa-pool>
<min-pool-size>5</min-pool-size>
<initial-pool-size>5</initial-pool-size>
<max-pool-size>30</max-pool-size>
<use-strict-min>true</use-strict-min>
<is-same-rm-override>false</is-same-rm-override>
<no-tx-separate-pools>true</no-tx-separate-pools>
</xa-pool>
<security>
<user-name>database.username</user-name>
<password>database.password</password>
</security>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
<background-validation>true</background-validation>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
</validation>
尝试改变connction,网址为'JDBC:在PostgreSQL://服务器1:5432/DB_NAME,JDBC:在PostgreSQL://服务器2:5432/db_name' –
@费德里科-Sierra的感谢,但这不起作用无论是。 jdbc:postgresql:// server1:5555/db_name,jdbc:postgresql:// server2:5555/db_name => org.postgresql.util.PSQLException:错误:没有这样的数据库:db_name,jdbc:postgresql:// server2:5555/db_name – Marc
尝试一个不同的'url-delimiter'例如' | url-delimiter>'并且检查URLs之间不存在空间 –