文档章节

nhmicro技术框架应用说明(事务、aop、分库分表、读写分离)

杰睿宁
 杰睿宁
发布于 2017/11/15 12:09
字数 863
阅读 19
收藏 0

事务控制

通过@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(GroovyObject groovyObject, String GroovyName, String methodName, Object... param) 触发责任链中下一个handler。 配置责任链:

<bean class="com.nh.micro.rule.engine.core.GroovyAopChain" init-method="init">
<property name="handlerList">
   <list>
<bean class="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,Map paramMap,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的增删改操作。
class checkview_user_view extends 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);
			return 1;
		}
		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");
			return 1;
		}
		if(type!=null && type.contains("insert")){
			paramMap.put("user_type", "1");
			createInfoService(paramMap,"test_user");
			return 1;
		}
	}
}

© 著作权归作者所有

杰睿宁

杰睿宁

粉丝 9
博文 21
码字总数 15442
作品 10
东城
私信 提问
NHMicro 1.1.7 发布,支持 MVC 各层代码热部署

NHMicro 1.1.7 已发布,该版本添加了 micro-mvc 模块。 micro-mvc框架,借助 nhmicro 框架和 groovy 技术使所有的 controller、servicebean、dao 和 sql 脚本都支持动态热部署和调试。 详见:...

杰睿宁
2018/01/12
922
4
脚本化微服务开源框架 - NHMicro

MVC 框架的缺点: 系统按照Controller、Service、Dao层次划分,虽然在建设初期技术结构清晰。但每个业务逻辑代码都分散到不同代码框,业务结构不直观,不利于后期业务重构。 业务代码与MVC技...

杰睿宁
2017/06/23
3K
5
NHMicro 添加互金产品与账户功能模板

NHMicro 新版发布,更新内容如下: NHMicro 添加 p2p 互联网金融理财功能模板,包括理财产品查询、账户管理等相关后台和页面。 添加面向互联网用户的定期理财产品列表页面和后台管理功能 点击...

杰睿宁
2017/07/26
835
1
NHMicro 添加贷款进件管理与合同模板管理功能

nhmicro添加进件管理功能 提交贷款进件、查看修改进件信息、上传附件、提交审批。 进件列表中点击添加,打开贷款进件申请录入页面 进件列表页面中可查看已录入进件记录 点击启动审批,提交至...

杰睿宁
2017/07/19
778
0
NHMicro 1.1.9 发布,支持与 springcloud 整合

NHMicro 1.1.9 发布,支持与 springcloud 整合 整合后 SpringCloud 的 controller 只需编写接口,在接口中配置 SpringCloud相关注解,业务实现在 groovy中编写,支持热部署。 SpringCloud整合...

杰睿宁
2018/01/18
858
0

没有更多内容

加载失败,请刷新页面

加载更多

Phpstorm2018 永久激活

1、安装phpstorm,安装包请自行官网下载 http://www.jetbrains.com/phpstorm/download/ 2、下载JetbrainsCrack.jar文件,存放至你的phpstorm执行文件同级目录下 下载JetbrainsCrack.jar 提取...

happyfish319
34分钟前
7
0
谈一谈Android进程间通信的几种方式

###来看一下Android中除了AIDL还有哪些进程间通信的方式: 1、Bundle Bundle实现了Parcelable,所以在Android中我们可以通过Intent在不同进程间传递Bundle数据。 但是在Intent 传输数据的过程...

二营长的意大利炮手
35分钟前
7
0
互联网薪资“高开低走”,你的能力是否真的可以匹配高薪?

对于国内外主流互联网大厂,技术出身似乎已经成为各大掌门人的必备标签。谷歌 CEO 桑达尔·皮查伊、马克·扎克伯格、李彦宏、马化腾、雷军等等皆为技术人出身,都曾参与了公司内部重要产品的...

Java技术剑
36分钟前
10
0
java 多线程

线程声明周期 线程的五个状态:新建,就绪,运行,阻塞,死亡。 其中就绪和运行两个状态客户互相转换,但运行到阻塞,阻塞到就绪,只能单向转换。 刚new出的线程就是【新建】状态,调用start...

雷开你的门
38分钟前
14
0
构造器Constructor是否可被overrid

构造器不能被重写,不能用static修饰构造器,只能用public private protected这三个权限修饰符,且不能有返回语句。

无名氏的程序员
42分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部