Skip to content

Commit

Permalink
Merge pull request #3405 from KouShenhai/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
KouShenhai authored Jan 23, 2025
2 parents 45c13ee + e2a0ef1 commit cc9f894
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@
import org.mybatis.spring.transaction.SpringManagedTransaction;

import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
Expand Down Expand Up @@ -210,7 +209,7 @@ public boolean willDoQuery(Executor executor, MappedStatement ms, Object paramet

@Override
public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds,
ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
ResultHandler resultHandler, BoundSql boundSql) {
IPage<?> page = ParameterUtils.findPage(parameter).orElse(null);
if (null == page) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@

package org.laokou.common.mybatisplus.config;

import net.sf.jsqlparser.expression.Function;
import net.sf.jsqlparser.statement.select.OrderByElement;
import org.apache.fury.Fury;
import org.apache.fury.ThreadSafeFury;

Expand All @@ -29,7 +27,7 @@ public final class FuryFactory {

private static final FuryFactory FACTORY = new FuryFactory();

private final ThreadSafeFury FURY = Fury.builder().buildThreadSafeFury();
private final ThreadSafeFury FURY = Fury.builder().withAsyncCompilation(true).buildThreadSafeFury();

public FuryFactory() {
FURY.register(net.sf.jsqlparser.expression.Alias.class);
Expand Down Expand Up @@ -249,17 +247,17 @@ public FuryFactory() {
FURY.register(net.sf.jsqlparser.expression.BinaryExpression.class);
FURY.register(net.sf.jsqlparser.expression.operators.relational.ComparisonOperator.class);
FURY.register(net.sf.jsqlparser.expression.operators.relational.OldOracleJoinBinaryExpression.class);
FURY.register(net.sf.jsqlparser.expression.Function.NullHandling.class);
FURY.register(net.sf.jsqlparser.statement.CreateFunctionalStatement.class);
FURY.register(net.sf.jsqlparser.statement.select.Select.class);
FURY.register(net.sf.jsqlparser.statement.select.SetOperation.class);
FURY.register(net.sf.jsqlparser.util.cnfexpression.MultipleExpression.class);
FURY.register(net.sf.jsqlparser.statement.insert.InsertModifierPriority.class);
FURY.register(OrderByElement.NullOrdering.class);
FURY.register(net.sf.jsqlparser.statement.select.OrderByElement.NullOrdering.class);
FURY.register(net.sf.jsqlparser.statement.select.ForMode.class);
FURY.register(net.sf.jsqlparser.statement.select.MySqlSqlCacheFlags.class);
FURY.register(net.sf.jsqlparser.statement.select.PlainSelect.BigQuerySelectQualifier.class);
FURY.register(net.sf.jsqlparser.statement.update.UpdateModifierPriority.class);
FURY.register(Function.NullHandling.class);
}

public static FuryFactory getFuryFactory() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@

import com.baomidou.mybatisplus.extension.parser.cache.AbstractCaffeineJsqlParseCache;
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.laokou.common.i18n.utils.ObjectUtil;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.function.Consumer;

/**
* jsqlparser 缓存 fury 序列化 Caffeine 缓存实现.
Expand All @@ -31,6 +37,32 @@ public FurySerialCaffeineJsqlParseCache(Cache<String, byte[]> cache) {
super(cache);
}

public FurySerialCaffeineJsqlParseCache(Consumer<Caffeine<Object, Object>> consumer) {
super(consumer);
}

public FurySerialCaffeineJsqlParseCache(Cache<String, byte[]> cache, Executor executor, boolean async) {
super(cache);
// 开启异步
super.async = async;
super.executor = executor;
}

@Override
protected void put(String sql, Object value) {
if (async) {
if (ObjectUtil.isNotNull(executor)) {
executor.execute(() -> cache.put(sql, serialize(value)));
}
else {
CompletableFuture.runAsync(() -> cache.put(sql, serialize(value)));
}
}
else {
cache.put(sql, serialize(value));
}
}

@Override
public byte[] serialize(Object obj) {
return FuryFactory.getFuryFactory().serialize(obj);
Expand Down

0 comments on commit cc9f894

Please sign in to comment.