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


    初次尝试:

    配置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

     补充说明:

    声明Bean用到的属性使用安全属性注入的话,可以使用如下配置

    1 spring.datasource.system.xa-properties.URL=jdbc:sqlserver://XXX;DatabaseName=XXX
    2 spring.datasource.system.xa-properties.user=sa
    3 spring.datasource.system.xa-properties.password=XXX
    4 spring.datasource.system.pool-size=20
    5 spring.datasource.system.xa-data-source-class-name=com.microsoft.sqlserver.jdbc.SQLServerXADataSource
    6 spring.datasource.system.unique-resource-name=systemDataSource
  • 相关阅读:
    【webpack 系列】进阶篇
    【webpack 系列】基础篇
    手写 Promise 符合 Promises/A+规范
    React-redux: React.js 和 Redux 架构的结合
    Redux 架构理解
    javascript 中的 this 判定
    编译原理
    vue 响应式原理
    强大的版本管理工具 Git
    js实现跨域(jsonp, iframe+window.name, iframe+window.domain, iframe+window.postMessage)
  • 原文地址:https://www.cnblogs.com/WongHugh/p/10792166.html
Copyright © 2020-2023  润新知