Open 35io opened 7 years ago
不管有无状态 客户端都应该有一个客户唯一识别标识 不然tenant_id是没有意义的 无状态可以参照OAuth2协议中的token
使用中遇到问题记录一下: 1.拦截6个参数的query方法才进拦截器。 2.修改后的sql并没有执行,将newBoundSql重新付值给BoundSql参数。 3.Criteria动态sql报错。 修复如下: 1)方法拦截签名增加 @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class }), 2)mod方法后加上 /**
*/
BoundSql newBoundSql = new BoundSql(
ms.getConfiguration(),
sqlParser.setTenantParameter(boundSql.getSql()),//更改后的sql
boundSql.getParameterMappings(),
boundSql.getParameterObject());
/**
There is no getter for property named '__frch_criterion_1' in 'class com.firework.xxxx.entity.Criteria' */ for(ParameterMapping mapping : boundSql.getParameterMappings()) { String prop = mapping.getProperty(); if (boundSql.hasAdditionalParameter(prop)){ newBoundSql.setAdditionalParameter(prop, boundSql.getAdditionalParameter(prop)); } }
MappedStatement newMs=buildMappedStatement(ms,new BoundSqlSqlSource(newBoundSql));
/**
替换MappedStatement */ invocation.getArgs()[MAPPED_STATEMENT_INDEX] = newMs;
// query method
if(args.length == 4) {
invocation.getArgs()[3] = newBoundSql;
}
if(args.length == 6) {
invocation.getArgs()[5] = newBoundSql;
}
请问一下,如果服务器端是无状态的,tenantid不放到 session里,有什么好的办法去处理