1.Meta上下文是平台传参的核心,千万别滥用,业务系统不得自行new Meta(),如已使用,请检查后去掉,优先改掉启动事件方法里的代码
2.当同步方法中需要meta时,应该通过BaseContextHandle.getMeta()来获取上下文信息;
3.当异步方法中需要meta时,应该调用rs.callAsync,不得自行创建线程
4.创建自己的 new Meta()
/**
* 第1步:使用try-with-resources new Meta(),会自动调用meta的close方法
*
* <pre>
* @Override
* public void close(Meta meta) {
* // 回滚异常
* if (meta.getError()) {
* meta.rollback();
* }
* // 提交事物
* connection.commit();
* // 关闭连接
* connection.close();
* }
* </pre>
*/
@MethodService(description = "创建Meta")
public void newMeta() {
try (Meta meta = new Meta(Meta.SUPERUSER, new HashMap<>())) {
// 第2步:设置meta到线程变量
BaseContextHandler.setMeta(meta);
/**
* TODO第3步:处理自己的业务逻辑 TestRole role = new TestRole(); role.setRoleName("test"); role.set("remark", "测试");
* role.create();
*
*
*
*/
// 第4步:刷新所有的数据到数据库
meta.flush();
} catch (Exception e) {
e.printStackTrace();
Meta meta = BaseContextHandler.getMeta();
// 第5步设置为异常,调用默认close方法的时候根据getError回滚
if (meta != null) {
meta.setError(true);
}
} finally {
// 第6步:清理线程变量
BaseContextHandler.remove();
}
}