开发者社区> 问答> 正文

JFinal2.1中全局拦截器中配置多个事务规则时报错?报错

@JFinal 你好,想跟你请教个问题:

JFinal2.1中在Config中加入事务拦截时,从第三个事务规则开始报错,不能定义多个规则吗?

2.0好像没有报错。@JFinalUIB中就是这样配置的。

/**
* 配置全局拦截器
*/
public void configInterceptor(Interceptors me) {

me.add(new GlobalInterceptor());

//配置开启事务规则
me.add(new TxByMethods("save", "update", "delete"));
me.add(new TxByMethodRegex(".*save.*"));
me.add(new TxByMethodRegex(".*update.*"));
me.add(new TxByMethodRegex(".*delete.*"));

}

报错信息:

java.lang.IllegalArgumentException: interceptor already exists, interceptor must be singlton, do not create more then one instance of the same Interceptor Class.
at com.jfinal.aop.InterceptorManager.addGlobalInterceptor(InterceptorManager.java:192)
at com.jfinal.aop.InterceptorManager.addGlobalActionInterceptor(InterceptorManager.java:175)
at com.jfinal.config.Interceptors.add(Interceptors.java:34)
at com.platform.config.run.BackConfig.configInterceptor(BackConfig.java:104)
at com.jfinal.core.Config.configJFinal(Config.java:50)
at com.jfinal.core.JFinal.init(JFinal.java:62)
at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4574)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5193)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

展开
收起
爱吃鱼的程序员 2020-06-10 15:17:30 593 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    拦截器是单例的,所以会有这个异常抛出,正则可以合并,很容易,这样:

    newTxByMethodRegex("(.*save.*|.*update.*|.*delete.*)");



    回复 @Jimmy哥:眼尖啊,一时手误造成的波总,正则表达式newTxByMethodRegex("(*.save.*|*.update.*|*.delete.*)")和newTxByMethodRegex("(.*save.*|.*update.*|.*delete.*)")不一样的吧...(.和*的位置)明白了,谢谢。 把重复的规则去掉试试 

    引用来自“我是FT”的评论

    把重复的规则去掉试试 

    me.add(newTxByMethodRegex("(.*save.*|.*update.*|.*delete.*)")); 

    //多方法名匹配使用一个正则匹配,2.1只支持单实例注册

    明白了,谢谢

    前面手误,正则写得不对,再更正一下:

    拦截器是单例的,所以会有这个异常抛出,正则可以合并,很容易,这样:

    newTxByMethodRegex("(.*save.*|.*update.*|.*delete.*)");



    2020-06-10 15:17:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载