当前位置:Gxlcms > 数据库问题 > 2019-04-29 EasyWeb下配置Atomikos+SQLServer分布式数据源

2019-04-29 EasyWeb下配置Atomikos+SQLServer分布式数据源

时间:2021-07-01 10:21:17 帮助过:5人阅读

spring.datasource.system.xa-properties.dataSourceURL=jdbc:sqlserver://XXX;DatabaseName=XXX 2 spring.datasource.system.xa-properties.username=sa 3 spring.datasource.system.xa-properties.password=XXX 4 spring.datasource.system.xa-data-source-class-name=com.alibaba.druid.pool.xa.DruidXADataSource 5 spring.datasource.system.unique-resource-name=systemDataSource

 

但是通过修改配置文件配置SQLServer发现:当我配置url=jdbc:sqlserver://XXX;DatabaseName=XXX时启动Spring Boot会报

1 xa not support dbType :sqlserver

查了下资料,说是Druid会通过url前缀选择JDBC驱动,再追踪错误查看了报错的地方,在源码com.alibaba.druid.pool.xa.DruidXADataSource下

 1  private XAConnection createPhysicalXAConnection(Connection physicalConn) throws SQLException {
 2         if (JdbcUtils.ORACLE.equals(dbType)) {
 3             try {
 4                 return OracleUtils.OracleXAConnection(physicalConn);
 5             } catch (XAException xae) {
 6                 LOG.error("create xaConnection error", xae);
 7                 return null;
 8             }
 9         }
10 
11         if (JdbcUtils.MYSQL.equals(dbType) || JdbcUtils.MARIADB.equals(dbType)) {
12             return MySqlUtils.createXAConnection(driver, physicalConn);
13         }
14 
15         if (JdbcUtils.POSTGRESQL.equals(dbType)) {
16             return PGUtils.createXAConnection(physicalConn);
17         }
18 
19         if (JdbcUtils.H2.equals(dbType)) {
20             return H2Utils.createXAConnection(h2Factory, physicalConn);
21         }
22 
23         if (JdbcUtils.JTDS.equals(dbType)) {
24             return new JtdsXAConnection(physicalConn);
25         }
26 
27         throw new SQLException("xa not support dbType : " + this.dbType);
28     }

看了下源码,发现里面有部分是从/META-INF/druid-driver.properties下读取的,但是都没有以前缀jdbc:sqlserver的属性,这说明DruidXADataSorce并不支持SQLServer 2008

解决思路:

1.发现里面有个配置jdbc:microsoft:=com.microsoft.jdbc.sqlserver.SQLServerDriver,那么就代表我可以配置成jdbc:microsoft:的url,但是发现这个对应的JDBC驱动是以前sqljdbc,而现在基本都是sqljdbc4,找不到这驱动,同时这驱动不能用于2008版本,所以放弃了这个做法

2.不使用DruidXADataSource,改为SQLServerXADataSource;最终选择的就是这种

具体操作:

1.暂时不用properties配置参数,直接在java配置文件中声明Bean

 1    @Bean(name="systemDataSource")
 2     @Primary
 3     //@ConfigurationProperties(prefix = "spring.datasource.system") 
 4     public DataSource dataSource() {
 5         AtomikosDataSourceBean dataSourceBean = new AtomikosDataSourceBean();
 6 
 7         SQLServerXADataSource datasource = new SQLServerXADataSource();
 8         datasource.setURL("jdbc:sqlserver://XXX;DatabaseName=XXX");
 9         datasource.setUser("sa");
10         datasource.setPassword("XXX");
11 
12         dataSourceBean.setXaDataSource(datasource);
13         dataSourceBean.setUniqueResourceName("systemDataSource");
14         dataSourceBean.setPoolSize(20);
15         return dataSourceBean;
16     }

2.还需要去数据库服务器处理一下

参考:https://www.ibm.com/support/knowledgecenter/zh/SSFTN5_8.5.6/com.ibm.wbpm.imuc.sbpm.doc/topics/db_xa_nd_win_man.html

技术图片

 

2019-04-29 EasyWeb下配置Atomikos+SQLServer分布式数据源

标签:idt   not   说明   地方   png   info   sda   err   直接   

人气教程排行