信息化端到端整体解决方案:包含BI展现,ERP应用,和HANA数据库软件许可,一台BI服务器、一台HANA开发测试服务器、一台HANA生产服务器,整套方案软硬件安装部署及后续整体支持服务。
ABAP 1 属于SAP的开发语言 例如:C, C++, net
2 常指工作岗位, 属于代码开发 技术实现
HANA :1 数据库
2 常指基于HANA数据库的, 技术应用
BW,BO 一种数据库的技术应用 属于SAP的模块类 他们主要目的就是展示大数据量的报表, 如百万, 千万数据量的报表
SAPHANA的命令行工具主要是hdbsql,可以交互式或非交互式运行,还可以从文件导入命令执行
我们首先来看看如何交互式运行命令
我们现在已经有了一个SAPHANA数据库
进入到命令行后我们需要切换到HANA安装时创建的用户,我们将切换到这个用户名:su_a17adm
然后输入hdbsql,我们就进入了交互式界面
SAP HANA是 SAP独创的内存计算,让企业前段应用层面产生的数据通过内存计算模式直接进行展现和分析,为企业真正实现秒级展现数据的需求,让企业在面对海量数据的时候,可以轻松自如的分析数据,作出正确的销售,生产,采购,库存策略。通过SAP HANA 可直接访问运营数据,而不影响SAP ERP 和其他运营系统的性能。企业可以近乎实时地将主要交易表同步到内存中,以便在分析或查找时能够轻松对这些表进行访问。一旦数据可通过内存访问,各个部门就可以从预订单据、销售线索、服务要求等大量列表中查找单个行项目,而不会对运营系统造成任何影响。这种高效的建模流程支持提供明细行项目的直接访问模型,以及支持更为复杂的分析流程的分析模型。
在方法中,使用了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数据库,为了这个项目,我们从SAP公司搞了一台SAP HANA数据库服务器,是HP的主机,服务器比一般的个人主机要大一些,当我和其他同事一起搬的时候,才知道这台机器那个沉呀,看来真是“货真价实”呀。
做数据库SQL差异性比较是系统支持HANA的关键。
原理上来讲并不能,即使速度提高了也是因为Hana的服务器性能更加强劲了(从传统的机械磁盘换成了SSD),部分或者完全抵消了写入效率上的问题。
首先Hana 列数据库的体系结构就决定了这一切,Hana是按列写入的。Oracle之类的数据库是按行写入的。 在业务上更改一条记录,传统数据库上只要写入一次,而Hana就需要写入多次
细节就不展开了,但总结下来就是这样的一个结论
月结的写入性能问题主要还是在凭证的互锁问题(并发写入),这是Hana 相比传统数据库更加不擅长的地方,所以大多数的用户并不会因为升级到Hana而在月结,尤其是带物料分类账的成本月结环节带来性能提升。 即使提升也是因为硬件更强了,而不是Hana的原因。(很遗憾的现实是, 接手优化过的几十家月结有性能问题的客户,没有一家因为升级到hana 而在物料账阶段得到性能的提升,相反很多比使用Oracle时下降了,不管是否升级hana,月结速度的提升还是需要靠有针对性的优化项目才能实现
以上就是关于如何使用SAP HANA平台处理大数据全部的内容,包括:如何使用SAP HANA平台处理大数据、想问一个有关SAP的问题,现在所说的ABAP.HANA跟BW.BO还有云之间是什么样的关系、saphana能在XP系统运行吗_sap升级到hana等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)