nhmicro技术框架应用说明(事务、aop、分库分表、读写分离)
来源:互联网 发布:拜年视频制作软件 编辑:程序博客网 时间:2024/06/14 07:15
事务控制
通过@Transactional注解控制事务
在groovy方法上加上@Transactional注解,则通过GroovyExecUtil.execGroovyRetObj调用触发此方法时,方法内的逻辑处理即可加入事务控制。
注:使用此事务控制方法,需要将com.nh.micro.template.GroovyTMAopImpl配置到aop责任链中。
通过execGroovyRetObjByDbTranNest方法启动事务
也可以通过MicroServiceTemplateSupport中的execGroovyRetObjByDbTranNest方法启动事务
public Object execGroovyRetObjByDbTranNest(String groovyName, String methodName, Integer nestDef, Object... paramArray)
参数为:
groovyName,为groovy脚本名称
methodName,为groovy方法名称
nestDef,为事务传播级别
paramArray,为代理的groovy脚本名称、方法所需参数
获取Mybatis的dao或其他spring管理的bean
调用MicroContextHolder的getContext方法获取ApplicationContext对象,通过它的getbean方法获取Mybatis的dao或其他spring的bean
getContext是静态无参方法:
public static ApplicationContext getContext()
针对已经大量生成Mybatis的dao的场景,通过此方法可以在Groovy脚本中获取Mybatis的dao进行数据库操作。
Groovy脚本支持Aop切面编写
技术框架支持针对Groovy脚本调用的责任链模式的切面handler管理。执行GroovyExecUtil.execGroovyRetObj方法时会依次触发责任链中的handler。可以自行开发日志记录或其他技术处理handler,并配置到责任链中。
编写一个handler需要继承GroovyAopInter接口,并实现invokeMethod(GroovyObject groovyObject, String GroovyName, String methodName, Object... param)方法,注意在handler执行过程中调用execNextHandler(GroovyObjectgroovyObject, String GroovyName, String methodName, Object... param)触发责任链中下一个handler。
配置责任链:
<beanclass="com.nh.micro.rule.engine.core.GroovyAopChain"init-method="init">
<propertyname="handlerList">
<list>
<beanclass="com.nh.micro.template.GroovyTMAopImpl"></bean>
</list>
</property>
</bean>
实现读写分离和分库
通过@ChangeDataSource注解设置目标数据源,结合MicroDynamicDataSource配置多数据源动态路由实现读写分离和分库功能
//在groovy脚本中可配置使用@ChangeDataSource注解
class TestGroovy extends MicroServiceTemplate {
@Transactional
@ChangeDataSource(name="local_xa_dataSource")
public Map queryTestPageList(){
Map pageMap=new HashMap();
pageMap.put("page", "1");
pageMap.put("rows", "10");
pageMap.put("sort", "id");
pageMap.put("order", "desc");
Map retMap=getInfoList4PageService(new HashMap(),"black",pageMap);
return retMap;
}
}
}
//Mybatis的Dao接口代码中,也可以使用@ChangeDataSource注解决定是否切换为其他数据源
package foo.repository;
import java.util.Map;
import com.nh.micro.datasource.ChangeDataSource;
public interface TestRep {
@ChangeDataSource(name="local_xa_dataSource")
public int updateInfo(Map paramMap);
@ChangeDataSource(name="local_xa_dataSource")
public int insertInfo(Map paramMap);
}
MicroDynamicDataSource动态切换数据源配置
<!-- micro动态切换数据源配置 -->
<bean id="dynamic_xa_dataSource" class="com.nh.micro.datasource.MicroDynamicDataSource" >
<property name="targetDataSources">
<map key-type="java.lang.String">
<!– 设置目标数据源为分布式事务数据源 -->
<entry key="local_xa_dataSource" value-ref=" dataSource2"></entry>
</map>
</property>
<!-- 默认目标数据源为主库普通数据源 -->
<property name="defaultTargetDataSource" ref="dataSource"/>
</bean>
实现分表操作
通过继承MicroServiceTemplateSupport并在checkView方法中定制逻辑,可以针对一个视图或虚拟的表名称操作时,实现分表操作或针对数据库视图增删改操作。
checkView(String tableName,MapparamMap,String bizId,String bizCol,String type)
参数为:
tableName,逻辑表名称
paramMap,参数map
bizId,业务逻辑id值
bizCol,业务逻辑id对应的数据库字段标识
type,触发操作类型TYPE_DEL_ID、TYPE_UPDATE_ID、TYPE_DEL_BIZID、TYPE_UPDATE_BIZID、TYPE_INSERT、TYPE_SELECT_ID、TYPE_SELECT_BIZID
示例代码
real_user_view是test_user表的视图,只显示user_type=1的记录
通过实现checkView方法,实现对视图real_user_view的增删改操作。
classcheckview_user_viewextends MicroServiceTemplateSupport{
public Integer checkView(String tableName,Map paramMap,String bizId,String bizCol,String type){
if(type!=null && type.contains("update_")){
Map userViewMap=getInfoByBizIdService(bizId,"real_user_view",bizCol);
String userCode=userViewMap.get("user_code");
updateInfoByBizIdService(userCode,"test_user","user_code",paramMap);
return1;
}
if(type!=null && type.contains("del_")){
Map userViewMap=getInfoByBizIdService(bizId,"real_user_view",bizCol);
String userCode=userViewMap.get("user_code");
delInfoByBizIdService(userCode,"test_user","user_code");
return1;
}
if(type!=null && type.contains("insert")){
paramMap.put("user_type","1");
createInfoService(paramMap,"test_user");
return1;
}
}
}
- nhmicro技术框架应用说明(事务、aop、分库分表、读写分离)
- nhmicro微服务框架开发技术说明
- nhmicro的dao层工具技术说明
- Spring AOP实现事务和主从读写分离
- Aop实现读写分离
- MySQL主从复制技术与读写分离技术amoeba应用
- MySQL主从复制技术与读写分离技术amoeba应用
- spring aop 实现读写分离
- spring aop实现读写分离:
- Spring实现数据库读写分离/spring事务配置解释(Annotation/Spring AOP/Reflection)
- Spring读写分离技术
- 读写分离技术
- Spring AOP 实现主从读写分离
- spring使用aop进行读写分离
- spring AOP多数据源读写分离
- 【spring】spring AOP实现mysql读写分离
- 基于Spring AOP方式的读写分离
- MySql读写分离的配置(AOP)
- 当美国民众将AI和工作自动化画上等号
- 改写jtopo滚轮缩放代码
- 暗黑斯坦福历史,从被人看不起到称霸全球
- jquery源码解析
- 数据可视化matplotlib(01) 图的选择
- nhmicro技术框架应用说明(事务、aop、分库分表、读写分离)
- IO流(一)
- BroadCast Receiver详解
- Java的第一个坑,多线程入门
- 一个子系统的配置
- MySQL 体系架构 Oracle体系架构 PostgreSQL体系架构
- C#(KeyChar)键值对照表
- 计算机等级考试--四级网络工程师1
- Android四大组件详解