在方法中,使用了hana数据源从hana数据库中查出数据,然后将数据写到mysql数据库中,对数据库进行修改 *** 作时,我们一般会添加事务回滚的 *** 作,以便程序出错时可以还原数据库。
问题:
在方法中添加能使程序异常的代码(比如:int i = 1/0;)进行测试,并在方法中贴上以下注解:
@Transactional(rollbackFor = Exceptionclass)
复制
但是发现事务并没有回滚
检查了项目的配置, 两个数据源配置了事务管理器:
hana数据源配置:
import javaxsqlDataSource;
import combaomidoumybatisplusspringMybatisSqlSessionFactoryBean;
import orgapacheibatissessionSqlSessionFactory;
import orgmybatisspringSqlSessionTemplate;
import orgmybatisspringannotationMapperScan;
import orgspringframeworkbeansfactoryannotationQualifier;
import orgspringframeworkbootjdbcDataSourceBuilder;
import orgspringframeworkcontextannotationBean;
import orgspringframeworkcontextannotationConfiguration;
import orgspringframeworkcontextannotationPrimary;
import orgspringframeworkcoreiosupportPathMatchingResourcePatternResolver;
import orgspringframeworkjdbcdatasourceDataSourceTransactionManager;
import topibase4jcoreConstants;
import topibase4jcoreutilPropertiesUtil;
import topibase4jcoreutilSecurityUtil;
@Configuration
@MapperScan(basePackages = "comxxxmapperhana",sqlSessionTemplateRef ="hanaSqlSessionTemplate")
public class HanaDataSourceConfig {
/创建数据源/
@Bean(name = "hanaDataSource")
@Primary
public DataSource gethanaDataSource() {
DataSource build = DataSourceBuildercreate()
driverClassName(PropertiesUtilgetString("hanadriverClassName"))
url(PropertiesUtilgetString("hanaurl"))
username(PropertiesUtilgetString("hanausername"))
password(SecurityUtildecryptDes(PropertiesUtilgetString("hanapassword"), ConstantsDB_KEYgetBytes()))
build();
return build;
}
@Bean(name = "hanaSqlSessionFactory")
@Primary
public SqlSessionFactory hanaSqlSessionFactory(@Qualifier("hanaDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
beansetDataSource(dataSource);
//设置mapper配置文件
beansetMapperLocations(new PathMatchingResourcePatternResolver()getResources("classpath:mapper/hana/xml"));
return beangetObject();
}
/创建事务管理器/
@Bean("hanaTransactionManger")
@Primary
public DataSourceTransactionManager hanaTransactionManger(@Qualifier("hanaDataSource") DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
/创建SqlSessionTemplate/
@Bean(name = "hanaSqlSessionTemplate")
@Primary
public SqlSessionTemplate hanaSqlSessionTemplate(@Qualifier("hanaSqlSessionFactory") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
复制

mysql数据源配置:
import combaomidoumybatisplusspringMybatisSqlSessionFactoryBean;
import orgapacheibatispluginInterceptor;
import orgapacheibatissessionSqlSessionFactory;
import orgmybatisspringSqlSessionTemplate;
import orgmybatisspringannotationMapperScan;
import orgspringframeworkbeansfactoryannotationQualifier;
import orgspringframeworkbootjdbcDataSourceBuilder;
import orgspringframeworkcontextannotationBean;
import orgspringframeworkcontextannotationConfiguration;
import orgspringframeworkcontextannotationEnableAspectJAutoProxy;
import orgspringframeworkcoreiosupportPathMatchingResourcePatternResolver;
import orgspringframeworkjdbcdatasourceDataSourceTransactionManager;
import orgspringframeworktransactionannotationEnableTransactionManagement;
import topibase4jcoreutilPropertiesUtil;
import javaxannotationResource;
import javaxsqlDataSource;
@Configuration
@MapperScan(basePackages = "comxxxmappermysql",sqlSessionTemplateRef ="mysqlSqlSessionTemplate")
public class MysqlDataSourceConfig {
@Resource
private MybatisPlusConfig mybatisPlusConfig;
/创建数据源/
@Bean(name = "mysqlDataSource")
public DataSource getmysqlDataSource() {
DataSource build = DataSourceBuildercreate()
driverClassName(PropertiesUtilgetString("druiddefaultdriverClassName"))
url(PropertiesUtilgetString("druidwriterdefaulturl"))
username(PropertiesUtilgetString("druidwriterdefaultusername"))
password(PropertiesUtilgetString("druidwriterdefaultpassword"))
build();
return build;
}
@Bean(name = "mysqlSqlSessionFactory")
public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
beansetDataSource(dataSource);
//设置mapper配置文件
beansetMapperLocations(new PathMatchingResourcePatternResolver()getResources("classpath:mapper/mysql/xml"));
Interceptor[] interceptors = {
mybatisPlusConfigpaginationInterceptor(),
mybatisPlusConfigperformanceSonInterceptor()
};
beansetPlugins(interceptors);
return beangetObject();
}
/创建事务管理器/
@Bean("mysqlTransactionManger")
public DataSourceTransactionManager mysqlTransactionManger(@Qualifier("mysqlDataSource") DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
/创建SqlSessionTemplate/
@Bean(name = "mysqlSqlSessionTemplate")
public SqlSessionTemplate mysqlSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
复制

由于默认的数据源是hana数据源,但是现在我们要将mysql的事务进行回滚,如果不将默认的事务管理器设置mysql对应的事务管理器为默认的话, 事务回滚将不起作用。
因此,可以添加配置类,以配置默认的事务管理器为mysql的,配置类要实现TransactionManagementConfigurer
/
将mysql数据源的事务管理器设置为默认的事务
/
@Configuration
public class SpecifyDefaultTransactionManagerConfig implements TransactionManagementConfigurer {
@Autowired
private MysqlDataSourceConfig mysqlDataSourceConfig;
@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
return mysqlDataSourceConfigmysqlTransactionManger(mysqlDataSourceConfiggetmysqlDataSource());
}
复制

再次进行测试,事务将回滚成功
如果不想添加配置类,可以在注解中标明使用的是哪个事务管理器
这里我们要用的是mysql的,因此可以这样配置
@Transactional(value = "mysqlTransactionManger",rollbackFor = Exceptionclass)
复制
value的值就是事务管理器bean的名称
spring boot
三星电视
精选推荐
广告

springboot多数据源即分布式事务解决方案
79下载·0评论
2018年10月16日
SSM多数据源配置事务回滚处理
2777阅读·0评论·1点赞
2019年1月15日
MySQL 多库事务回滚
284阅读·0评论·0点赞
2022年10月23日
Spring Boot多数据源(支持Spring声明式事务切换和回滚)pdf
10下载·0评论
2021年7月21日
Spring 事务
165阅读·0评论·0点赞
2020年4月14日
java多数据源回滚_Spring多数据源事务
1053阅读·0评论·0点赞
2021年3月10日
Springboot多数据源 解决事务回滚失效
3004阅读·6评论·2点赞
2021年8月6日
springboot 多数据源 添加事务,事务回滚
1125阅读·4评论·0点赞
2021年12月1日
dynamic-datasource多数据源的配置使用(读写分离、事务的回滚)
4146阅读·3评论·4点赞
2022年1月26日
Spring Boot项目多数据源事务不生效的问题
2641阅读·0评论·8点赞
2021年10月15日
Springboot集成SpringJDBC多数据源事务回滚(二)
SAP HANA 是一个功能强大的内存平台,旨在为你交付前所未有的洞察。借助该平台,你的所有问题都将迎刃而解。
重新构建业务模式:简化业务协作,实现人员、设备和业务网络的实时互联
重新定义业务决策:随时随地实时洞察任何数据,加速产生业务影响
重新构想业务流程:实时掌控关键任务,灵活、快速地调整业务
重新打造用户体验:通过任意设备获取简单、个性化的用户体验,轻松完成所有业务线中的工作
顾家家居床垫用HANA数据系统。
顾家家居内部涉及到20多个不同的业务系统,信息技术部门正在整合多个业务系统的数据建设以HANA数据库为数据中心,完成企业内部的数据整合和统一处理。
SAP HANA内存计算引擎为内存计算提供了各种算法。它为开发在SAP HANA上运行的应用程序的开发人员和客户提供了多个应用程序库,这些库动态链接到SAP HANA数据库内核。目前Accrets在新加坡的多个三级数据中心拥有并运营私有云IT基础设施,这些数据中心为多个国际电信运营商提供最密集的连接,为与公共云提供商的安全混合连接提供Cloud Exchange结构访问,在管理用户的IT环境时,采用ITIL(信息技术基础设施库),应用最佳的IT服务管理程序支持用户的需求。 还有不清楚的可以自己百度。
1、传统数据库可以运行在传统设备上,但HANA数据库必须使用HANA认证机型;
2、传统数据库取数时从存储中取,HANA数据库从内存中读取数据,从这个角度上说HANA快些;
3、使用传统数据库ECC用啥版本都行,HANA必须ERP60+EHP7以上;
4、按SAP的说法在HANA上的财务模块,有些版本减少了一些冗余的中间表,但存在和原来同构的视图,所以迁移后不影响自开发的程序的运行。
帮助客户制定HANA计划的咨询顾问与分析师承认其中的复杂性,他们认为HANA分析型应用将最终走进企业混合ERP环境
也许短期大规模BusinessSuite向HANA的迁移不会出现,但这是一个非常重大的变革,SAP用户必须重新评估他们的企业系统
埃森哲公司的SAP分析与HANA部门全球主管NicolaMoriniBianzino表示:“客户向HANA迁移的方式是小步走,大多数的SAP客户都在进行评估,他们需要一套系统的方法来决定如何进行迁移,以及是否在云中运行HANA
客户将从小的组件开始向HANA迁移,同时需要保证业务的正常运转
这与迁移到云的形式非常相似,部分业务留在企业内部,部分放到云中
”对于那些市场竞争中处于领先位置的大型企业来说,他们对预测分析的需求是明显的,是HANA的典型客户群
而像公共事业这种行业,他们的迁移步伐会慢一些
当HANA企业云以及相关的选项更成熟,证明迁移更可行的时候,MoriniBianzino期待一些小型公司也能够跟上脚步
相比而言,SAPBWonHANA应用更简单一些,而且成本与风险相对较低
MoriniBianzino表示:“通常BW系统的规模不是很大,所以前期的投入会相对较少
埃森哲在印度的一个制造业客户近期就完成了向HANA的迁移
”另外一些没有准备好对ERP系统进行完全“平台再造”的客户首先会考虑一些批量处理负载,比如财务结算,他们能够从HANA的性能提升上快速获得回报
改写历史一些观察家指出,HANA强袭的一个主要原因是SAP对新的收入流的迫切需求
凯捷公司的HANA咨询顾问MikePrice表示,ERP热潮早已经过去,而为了推广HANA,SAP不得不对其ERP平台进行重新投资,包括核心代码的重写
实在难以想象现在有多少人在为此写代码
SAP声称,基于HANA的BusinessSuite对客户来说将提供无缝的迁移体验,专家对此表示赞同
Forrester著名分析师PaulHamerman称,基于HANA的BusinessSuite并不是另一个版本,它更像是一个增强的功能包
客户通过迁移到HANA的确能够获得非常好的性能提升,比如在财务结算上的测试显示能够提供1000倍以上的性能提升
Hamerman表示:“在HANA的推广方面,SAP一直非常小心,不给客户造成迁移必须‘大动干戈’的印象
这与甲骨文形成鲜明对比
”Hamerman这里指的是Oracle融合应用软件产品线
HANA早期回报体现在接近实时的运行传统的批量处理应用
然而,速度并不是唯一的优势
特别是对于跨国公司来说,他们基本上会统一时间进行基于ERP的批量处理,通常是在夜里
然而由于时差关系,一些地区业务就可能需要暂停
因此这种接近于实时的处理能力会非常具有吸引力
通常说到SAP,指的都是SAPBusinessSuite/R3(ECC)这款产品。
那么SAPS/4HANA与SAPR3究竟有什么不同呢?
简单地说,S/4HANA是下一代的R/3和SAP商务套件SAP。它利用新的用户体验技术(SAPFiori)和内存处理和数据库技术(SAPHANA),以及引入了一个新的引导配置的概念。
因此,它提高了简单,减少了处理时间,并提供比更大的功能在R/3是可用的。S/4hana重点是财务、ERP、CRM,SRM,SCM,PLM,和BW,与财务的组件组成的SAP新近发布的简单财务应用。进一步的功能目前在SAPERP被建造出来的。
SAPR3基于任何的数据库(包括SAPHANA数据库),而SAPS/4HANA是完全基于SAPHANA构建,优化了产品代码及数据结构,简化了财务流程和产品逻辑,并且应用了SAPFiori新的用户交互系统。
以上就是关于失败回滚项目变成子模块全部的内容,包括:失败回滚项目变成子模块、sap hana是属于哪一种数据库技术方案、顾家家居床垫用什么数据系统等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)