标签:Atomikos XXX return 04 dbType 数据源 xa jdbc datasource
初次尝试:
配置Mysql时候使用的是Atomikos+DruidXADataSource,所以觉得配置SQLServer应该也是仅仅配置配置就够了,于是引入JDBC驱动依赖后,配置了文件
1 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
标签:Atomikos,XXX,return,04,dbType,数据源,xa,jdbc,datasource 来源: https://www.cnblogs.com/WongHugh/p/10792166.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。