8
回答
请问你使用jfinal怎么引入spring事务呢
【腾讯云】校园拼团福利,1核2G服务器10元/月!>>>   

@绝望的八皮 你好,想跟你请教个问题:请问你使用jfinal怎么引入spring事务呢,我知道jfinal有spring插件,但是jfinal的activerecord本身有数据库连接,请问你如果在service进行事务控制的。谢谢。

<无标签>
举报
方欣源
发帖于6年前 8回/1K+阅
共有8个答案 最后回答: 3年前
   给你个方案:写个代理类相当于拦截器,在这个类中将需要被代理的方法被 Db.tx(new IAtom(){public boolean run(){......}}; 包裹一下。然后在 Spring 将此代理类与被代理的 Service 类配置好

这个事情我现在也没有做还,之前是在技术选型的时候考虑过这样的搭配。

下面是从TxByRegex.java中复制的代码。

	public void intercept(final ActionInvocation ai) {
		if (pattern.matcher(ai.getActionKey()).matches()) {
			Db.tx(new IAtom(){
				public boolean run() throws SQLException {
					ai.invoke();
					return true;
				}});
		}
		else {
			ai.invoke();
		}
	}

可以参考这个,在一个切面里面写上打开关闭和回滚事务的代码,然后用这个切面来加强你的业务类。

另外如果datasource是由spring创建的话,直接用spring的声明事务代理ds。我没测试过,楼主可以试一试。

我的方法是重写 DbKit 类,将 Connection 的获取与释放的地方均采用 spring 的 DataSourceUtils来处理,这样就既可以直接使用spring的声明式事务,又可以使用Jfinal的activeRecord插件快速开发。 

希望詹老师能够提供一种更优雅的接口

--- 共有 1 条评论 ---
qiran我是在jfinalconfig层中spring配置的数据源,添加到ActiveRecordPlugin类中。这样后期获取的数据连接都是有spring统一管理。 3年前 回复

@绝望的八皮   我在引入spring事务时,在jfinalconfig中通过spring来统一管理数据源。controller层中直接使用Model层注入方式,通过Tx注解的方式来管理事务,但是配置后,在controller层并没有效果。请问如果要在controller层控制事务呢,需要做些什么工作?

顶部