神通数据库-Jdbc3XADataSource 封装错误

该类继承了BaseDataSource类,实现了Referenceable和XADataSource两个接口

package com.oscar.xa;

import com.oscar.Driver;
import com.oscar.jdbcx.optional.BaseDataSource;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Reference;
import javax.naming.Referenceable;
import javax.sql.XAConnection;
import javax.sql.XADataSource;

public class Jdbc3XADataSource extends BaseDataSource
  implements Referenceable, XADataSource
{
  public String getDescription()
  {
    return "JDBC3 XA-enabled DataSource from " + Driver.getVersion();
  }

  public XAConnection getXAConnection() throws SQLException {
    return getXAConnection(getUser(), getPassword());
  }

  public XAConnection getXAConnection(String user, String password) throws SQLException
  {
    Connection con = super.getConnection(user, password);
    return new Jdbc3XAConnection(con);
  }

  protected Reference createReference() {
    return new Reference(getClass().getName(), OSCARXADataSourceFactory.class.getName(), null);
  }

}


com.oscar.xa.Jdbc3XAConnection 封装物理连接com.oscar.jdbc.OscarJdbc2Connection错误

java.sql.SQLException: error enlisting a JdbcConnectionHandle of a JdbcPooledConnection from datasource *******DS in state ACCESSIBLE with usage count 1 wrapping com.oscar.xa.Jdbc3XAConnection@11a438e on Pooled connection wrapping physical connection com.oscar.jdbc.OscarJdbc2Connection@4c3a7d Query: sql语句略 order by t1.id desc  Parameters: []
    at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:392)
    at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:413)
    at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:213)
    at com.包名略.common.db.BaseDAO$1ExecuteCallback.execute(BaseDAO.java:73)
    at com.包名略.common.db.BaseDAO.execute(BaseDAO.java:443)
    at com.包名略.common.db.BaseDAO.query(BaseDAO.java:76)
    at com.包名略.common.db.BaseDAO.executeQuery(BaseDAO.java:55)
    at com.包名略.包名略.包名略.包名略.dao.jdbc.类名略.getActivityEventListNonPaged(ActivityEventDaoPostgreSqlImpl.java:229)
    at com.包名略.包名略.包名略.包名略.cache.类名略.initActivityEventCache(ActivityEventCacheManager.java:220)
    at com.包名略.包名略.包名略.包名略.cache.类名略$$FastClassBySpringCGLIB$$fa7de9b.invoke(<generated>)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Sharding-JDBC 5.2和Spring Boot时,配置XA事务需要进行以下步骤: 1. 首先需要在pom.xml文件中添加XA事务依赖: ```xml <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-transaction-xa-core</artifactId> <version>${sharding-jdbc-version}</version> </dependency> ``` 其中,`${sharding-jdbc-version}`是Sharding-JDBC的版本号。 2. 在Spring Boot的配置文件(application.yml或application.properties)中添加以下配置: ```yaml spring: shardingsphere: datasource: names: master, slave master: url: jdbc:mysql://localhost:3306/db_master?useSSL=false username: root password: root driver-class-name: com.mysql.jdbc.Driver slave: url: jdbc:mysql://localhost:3306/db_slave?useSSL=false username: root password: root driver-class-name: com.mysql.jdbc.Driver sharding: default-data-source-name: master tables: order: actual-data-nodes: master.order, slave.order database-strategy: inline: sharding-column: user_id algorithm-expression: db${user_id % 2} table-strategy: inline: sharding-column: order_id algorithm-expression: order_${order_id % 2} key-generator: column: order_id type: SNOWFLAKE binding-tables: - order transaction: type: XA ``` 其中,`transaction.type`配置为`XA`表示启用XA事务。 3. 配置数据源为XA数据源。 在Spring Boot的配置类中,可以使用如下代码创建XA数据源: ```java @Bean public DataSource dataSource() throws SQLException { AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean(); xaDataSource.setXaDataSourceClassName("com.mysql.cj.jdbc.MysqlXADataSource"); xaDataSource.setUniqueResourceName("dataSource"); Properties properties = new Properties(); properties.put("user", "root"); properties.put("password", "root"); properties.put("URL", "jdbc:mysql://localhost:3306/db_master?useSSL=false"); xaDataSource.setXaProperties(properties); return xaDataSource; } ``` 在上面的代码中,我们使用了AtomikosDataSourceBean来创建XA数据源,同时配置了数据库的用户名、密码和连接URL。 4. 使用XA事务进行数据库操作。 在需要使用XA事务的地方,可以使用如下代码: ```java @Autowired private TransactionTemplate transactionTemplate; public void doTransaction() { transactionTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus status) { // 进行数据库操作 } }); } ``` 在上面的代码中,我们通过注入`TransactionTemplate`对象来执行数据库操作,并使用`TransactionCallbackWithoutResult`回调函数来指定具体的操作。在回调函数中,我们可以通过`TransactionStatus`对象来控制事务的提交和回滚。 总之,以上就是使用Sharding-JDBC 5.2和Spring Boot进行XA事务配置的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值