DruidDataSource dataSource = service.getDataSource(split[0]); connection = dataSource.getConnection(); SqlSession sqlSession = sqlSessionFactory.openSession(connection);连接成功后提示:org.apache.ibatis.exceptions.PersistenceException: ### Error opening session. Cause: java.lang.UnsupportedOperationException: New Spring transactions require a DataSource ### Cause: java.lang.UnsupportedOperationException: New Spring transactions require a DataSource
时间: 2024-02-15 11:03:02 浏览: 358
canal adapter 1.1.5 DruidDataSource 连接池异常
这个错误提示也是因为在使用 Spring 事务时,没有指定数据源。
可以尝试在代码中增加如下配置:
```java
// 获取数据源
DruidDataSource dataSource = service.getDataSource(split[0]);
// 创建数据源事务管理器
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
// 创建事务模板
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
// 使用事务模板执行数据库操作
Object result = transactionTemplate.execute(new TransactionCallback<Object>() {
@Override
public Object doInTransaction(TransactionStatus transactionStatus) {
try {
// 获取数据库连接
Connection connection = dataSource.getConnection();
// 打开 MyBatis 会话
SqlSession sqlSession = sqlSessionFactory.openSession(connection);
// 执行数据库操作
// ...
// 提交事务
sqlSession.commit();
return null;
} catch (Exception e) {
// 回滚事务
sqlSession.rollback();
throw e;
} finally {
// 关闭 MyBatis 会话
sqlSession.close();
}
}
});
// 处理返回结果
// ...
```
其中,`dataSource` 是获取到的数据源,`sqlSessionFactory` 是 MyBatis 的会话工厂。
通过创建数据源事务管理器和事务模板,可以在执行数据库操作时同时开启事务,并自动使用指定的数据源。需要注意的是,在执行数据库操作后,需要手动提交事务或回滚事务,并关闭 MyBatis 会话。
阅读全文