2022-12-04 13:49
多数据源事务属于分布式事务,jfinal 没有提供支持
你要实现分布式事务,最好是借助第三方中间件,专业的事情交给专业的人,用一用 Sharding JDBC 这类中间件,基本上只需要配置,对于应用来说是透明的
要保障分布式事务的原子性、一致性,不是一般人想象的那样简单,性能代价也比较大
一般可以在业务层想办法解决,例如两个数据源的事务分别提交,前面的事务提交后在数据库留下某种状态信息,根据状态再决定是否决定执行第二个事务,再根据第二个事务的成功与否再决定第一个事务的状态是否要回到原状态(需要业务代码)
上面的方式比较麻烦,还有一个简单办法是,在设计层面将两个事务拆分成两个状态,让其成为业务的流程的两个环节,根据状态可决定下一步可以做什么事情
有关业务流程的表中通常要放一个 state 状态字段
2022-12-01 21:16
还有很多办法,方法一:
通过 JsonRender.gAttrs()、getJsonText() 获取必要数据,参考 JsonRender.buildJsonText() 中的代码去生成 json 来使用,这个会额外消耗性能
方法二:
继承 JsonRender 做一个 MyJsonRender,覆盖其中 buildJsonText() 方法,将方法声明中的 protected 改为 public:
public void buildJsonText() {
super.buildJsonText();
}
然后在拦截器中大致这么用:
if (render instanceof MyJsonRender) {
MyJsonRender mjr = (MyJsonRender)render;
if (getJsonText() == null) {
mjr.builderJsonText();
String json = getJsonText();
}
}
以上的 json 对象就得到了最终的 jsonText() 并且还不影响性能
方法二扩展的 MyJsonRender 可以放在 BaseController 中,通过覆盖父类的 renderJson 来实现,也可以更彻底通过扩展 RenderFactory 来实现切换,具体看下文档或者源代码
2022-11-10 23:42
@yjjdick1990 可能加个 servlet, druid 的控制台可以通过 servlet 支持,也有可能是通过 Filter 支持,要看看它的文档