JFinal路由配置

JFinal路由配置,第1张

创建一个类去继承JfianlConfig,然后重写它里面的一个方法configRoute,再创建一个新的实例AdminRoutes,AdminRoutes这个类去继承Routes,Routes里面添加映射路径指定到controller,然后会默认跳转到controller里面的index方法。

 路由拆分到 FrontRutes 与 AdminRoutes 之中配置的好处:

    1:可分别配置不同的 baseViewPath 与 Interceptor

    2:避免多人协同开发时,频繁修改此文件带来的版本冲突

    3:避免本文件中内容过多,拆分后可读性增强

    4:便于分模块管理路由

可以考虑参考TOP(淘宝开放平台)的规范,或者参考基于Spring实现的ROP的实现,通过post/get访问唯一入口,通过指定参数来派发到指定

的action。服务端一律返回json串,目前在做一个基于JFinal实现的类似TOP的插件,这阵子太忙了。这阵子忙完了放出来。

先放一些预告片

配置插件

public void configPlugin(Plugins me) {

JopPlugin jop = new JopPlugin()

jop.addService("1.0", "hello", "/hello")

jop.addService("1.0", "user", "/user")

jop.extendsService("2.0","1.0")//版本2继承自版本1

jop.addMethod("2.0", "user.add", "/user/addV2")//版本2修改的服务

jop.setAppSecretManager(new SampleAppSecretManager())//安全认证服务

me.add(jop)

}

@Override

public void configRoute(Routes me) {

me.add("/api", ApiController.class)

me.add("/hello", HelloController.class)

me.add("/user", UserController.class)

}

这是唯一入口地址,jobrequestprocessor进行权限验证和请求转发。

public class ApiController extends Controller {

public void route() {

JopRequestProcessor.me().processRequest(this)

}

}

调用方式:

http://localhost:8080/api/route?v=2.0&method=user.add&app_key=00001&timestamp=20140918202830&nonce=343128&sign=B50FE891DDB0DCA4484229614EECDB470804B0F0

http://localhost:8080/api/route?v=1.0&method=user.add&app_key=00001&timestamp=20140918202830&nonce=343128&sign=F2687669CD9188EDBC7F34510B6FE8F273746861

第一个请求派发到/user/addV2,第二个请求派发到/usr/add

@JFinal 给点意见啊。目前还有不少工作需要做,特别是错误信息统一化问题。

先说jfinal 有哪些事务处理方式:

1、声明式事务

ActiveRecord支持声明式事务,声明式事务需要使用ActiveRecordPlugin提供的拦截器来实现,拦截器的配置方法见Interceptor有关章节。仅声明了一个Tx拦截器即为action添加了事务支持。除此之外ActiveRecord还配备了TxByActionKeys、TxByActionKeyRegex、TxByMethods、TxByMethodRegex,分别支持actionKeys、actionKey正则、actionMethods、actionMethod正则声明式事务,TxByRegex拦截器可通过传入正则表达式对action进行拦截,当actionKey被正则匹配上将开启事务。TxByActionKeys可以对指定的actionKey进行拦截并开启事务,TxByMethods可以对指定的method进行拦截并开启事务。特别注意:声明式事务默认只针对主数据源进行回滚,如果希望针对 “非主数据源” 进行回滚,需要使用注解进行配置

2、Db.tx 事务

除了声明式事务以外,还可以直接使用代码来为一段代码添加事务,以下是示例代码:

Db.tx(new IAtom() {

   public boolean run() throws SQLException {

      Db.update("update t1 set f1 = ?", 123)

      Db.update("update t2 set f2 = ?", 456)

      return true

   }

})

以上代码中的两个 Db.update 数据库 *** 作将开启事务。Db.tx 做事务的好处是控制粒度更细,并且可以通过  return false 进行回滚,也即不必抛出异常即可回滚。

与声明式事务一样,Db.tx 方法默认针对主数据源进行事务处理,如果希望对其它数据源开启事务,使用 Db.use(configName).tx(...) 即可。

注意:MySql数据库表必须设置为InnoDB引擎时才支持事务,MyISAM并不支持事务。

也就是说如果你需要使用Db等工具 *** 作数据库, 那么jfinal 自己的事务处理已经满足需要.

如果使用的是Spring系数据库 *** 作工具, 那么就直接使用spring事务就可以了, 不存在引入一说了. 如果说的是项目启动时需要启动相应工具的话:

在 JFinalConfig 继承类中可以添加 afterJFinalStart() 与 beforeJFinalStop(),JFinal 会在系统启动完成之后以及系统关闭之前分别回调这两个方法, 或者在configPlugin(..)此方法用来配置JFinal的Plugin


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7864290.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存