logo制作免费版,网站关键词优化培训,网站网络营销推广,免费的微信小程序模板场景#xff1a;高并发情况下mybatis 动态sql 解析 锁问题优化 优化前 并发测试 XMLLanguageDriver 类 的 createSqlSource 方法有锁 而且 每次执行时都会走该方法 优化前 #xff1a; 线程有Block 优化后的 LanguageDriver
public class CustomXMLLanguageDriver im…场景高并发情况下mybatis 动态sql 解析 锁问题优化 优化前 并发测试 XMLLanguageDriver 类 的 createSqlSource 方法有锁 而且 每次执行时都会走该方法 优化前 线程有Block 优化后的 LanguageDriver
public class CustomXMLLanguageDriver implements LanguageDriver {private final MapString, SqlSource sqlSourceCache new ConcurrentHashMap();Overridepublic ParameterHandler createParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) {return new DefaultParameterHandler(mappedStatement, parameterObject, boundSql);}Overridepublic SqlSource createSqlSource(Configuration configuration, XNode script, Class? parameterType) {XMLScriptBuilder builder new XMLScriptBuilder(configuration, script, parameterType);return builder.parseScriptNode();}Overridepublic SqlSource createSqlSource(Configuration configuration, String script, Class? parameterType) {if (script.startsWith(script)) {SqlSource cachedSqlSource sqlSourceCache.get(script);if (cachedSqlSource ! null) {return cachedSqlSource;}XPathParser parser new XPathParser(script, false, configuration.getVariables(), new XMLMapperEntityResolver());SqlSource sqlSource this.createSqlSource(configuration, parser.evalNode(/script), parameterType);sqlSourceCache.put(script, sqlSource);return sqlSource;} else {script PropertyParser.parse(script, configuration.getVariables());TextSqlNode textSqlNode new TextSqlNode(script);return (SqlSource) (textSqlNode.isDynamic() ? new DynamicSqlSource(configuration, textSqlNode) : new RawSqlSource(configuration, script, parameterType));}}
}
优化后使用相同的压测条件 发现线程没有Block 的 而且调用栈 中只有Druid 的 初始化线程池 有Block XMLLanguageDriver Block 消失 此时的 线程没有阻塞