
1、修改环境变量,ODBCHOME=$INFA_HOME/ODBC5.2,并修改$PATH 及 $LIBPATH,将$ODBCHOME/bin 加入到$PATH 路径下,将$ODBCHOME/lib 加入到 $LIBPATH 路径中。
2、验证ODBC driver 是否被正确加载,到$ODBCHOME/bin 目录下,用 ddtestlib DWmsss22.so 进行验证,如果正确的话会看到如下信息: Load of DWmsss22.so successful, qehandle is 0x3 File version: 05.20.0024 (b0014, u0012)
3、配置ODBC.INI 文件,执行cp $ODBCHOME/odbc.ini $HOME/.odbc.ini , 然后修改.odbc.ini,在[ODBC]部分增加如下SQLServer 的信息: [ODBC] SQLSERVER_KQ1=DataDirect 5.10 SQL Server Wire Protocol [SQLSERVER_KQ1] Driver=Description=DataDirect 5.10 SQL Server Wire Protocol Database= LogonId= Password= Address=, QuotedId=No AnsiNPW=No
4、在workflow mamager 创建connection,如图,所有的配置完毕。
因为sap一直使用甲骨文的数据库,而两家在市场是竞争对手,所以sap迫切要求拥有自己的数据库这就是hana出现的原因。简单说hana就是所有的字段都是key字段,(增加了检索的速度),形象说就是横着看,竖着看,都有KEY
hana数据库运行时,数据保存在内存中,这样可以跳过硬盘,
计算机技术目前的瓶颈就是内存->总线->硬盘。其中大量的时间消耗在总线上了。
这样一来hana检索数据的效率比较快。
再要具体的,就不是一句两句能说完的了,你需要去看SAP的资料
在方法中,使用了hana数据源从hana数据库中查出数据,然后将数据写到mysql数据库中,对数据库进行修改 *** 作时,我们一般会添加事务回滚的 *** 作,以便程序出错时可以还原数据库。问题:
在方法中添加能使程序异常的代码(比如:int i = 1/0)进行测试,并在方法中贴上以下注解:
@Transactional(rollbackFor = Exception.class)
复制
但是发现事务并没有回滚
检查了项目的配置, 两个数据源配置了事务管理器:
hana数据源配置:
import javax.sql.DataSource
import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean
import org.apache.ibatis.session.SqlSessionFactory
import org.mybatis.spring.SqlSessionTemplate
import org.mybatis.spring.annotation.MapperScan
import org.springframework.beans.factory.annotation.Qualifier
import org.springframework.boot.jdbc.DataSourceBuilder
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Primary
import org.springframework.core.io.support.PathMatchingResourcePatternResolver
import org.springframework.jdbc.datasource.DataSourceTransactionManager
import top.ibase4j.core.Constants
import top.ibase4j.core.util.PropertiesUtil
import top.ibase4j.core.util.SecurityUtil
@Configuration
@MapperScan(basePackages = "com.xxx.mapper.hana",sqlSessionTemplateRef ="hanaSqlSessionTemplate")
public class HanaDataSourceConfig {
/**创建数据源*/
@Bean(name = "hanaDataSource")
@Primary
public DataSource gethanaDataSource() {
DataSource build = DataSourceBuilder.create()
.driverClassName(PropertiesUtil.getString("hana.driverClassName"))
.url(PropertiesUtil.getString("hana.url"))
.username(PropertiesUtil.getString("hana.username"))
.password(SecurityUtil.decryptDes(PropertiesUtil.getString("hana.password"), Constants.DB_KEY.getBytes()))
.build()
return build
}
@Bean(name = "hanaSqlSessionFactory")
@Primary
public SqlSessionFactory hanaSqlSessionFactory(@Qualifier("hanaDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean()
bean.setDataSource(dataSource)
//设置mapper配置文件
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/hana/*.xml"))
return bean.getObject()
}
/**创建事务管理器*/
@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 com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean
import org.apache.ibatis.plugin.Interceptor
import org.apache.ibatis.session.SqlSessionFactory
import org.mybatis.spring.SqlSessionTemplate
import org.mybatis.spring.annotation.MapperScan
import org.springframework.beans.factory.annotation.Qualifier
import org.springframework.boot.jdbc.DataSourceBuilder
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.EnableAspectJAutoProxy
import org.springframework.core.io.support.PathMatchingResourcePatternResolver
import org.springframework.jdbc.datasource.DataSourceTransactionManager
import org.springframework.transaction.annotation.EnableTransactionManagement
import top.ibase4j.core.util.PropertiesUtil
import javax.annotation.Resource
import javax.sql.DataSource
@Configuration
@MapperScan(basePackages = "com.xxx.mapper.mysql",sqlSessionTemplateRef ="mysqlSqlSessionTemplate")
public class MysqlDataSourceConfig {
@Resource
private MybatisPlusConfig mybatisPlusConfig
/**创建数据源*/
@Bean(name = "mysqlDataSource")
public DataSource getmysqlDataSource() {
DataSource build = DataSourceBuilder.create()
.driverClassName(PropertiesUtil.getString("druid.default.driverClassName"))
.url(PropertiesUtil.getString("druid.writer.default.url"))
.username(PropertiesUtil.getString("druid.writer.default.username"))
.password(PropertiesUtil.getString("druid.writer.default.password"))
.build()
return build
}
@Bean(name = "mysqlSqlSessionFactory")
public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean()
bean.setDataSource(dataSource)
//设置mapper配置文件
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/mysql/*.xml"))
Interceptor[] interceptors = {
mybatisPlusConfig.paginationInterceptor(),
mybatisPlusConfig.performanceSonInterceptor()
}
bean.setPlugins(interceptors)
return bean.getObject()
}
/**创建事务管理器*/
@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 mysqlDataSourceConfig.mysqlTransactionManger(mysqlDataSourceConfig.getmysqlDataSource())
}
复制
再次进行测试,事务将回滚成功
如果不想添加配置类,可以在注解中标明使用的是哪个事务管理器
这里我们要用的是mysql的,因此可以这样配置
@Transactional(value = "mysqlTransactionManger",rollbackFor = Exception.class)
复制
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多数据源事务回滚(二)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)