forked from p81075629/datagear
系统缓存统一改为Caffeine,移除Guava
This commit is contained in:
parent
41ebeb91e0
commit
afcf9878a7
|
@ -9,7 +9,7 @@
|
|||
系统添加缓存支持:
|
||||
ok 服务层API内部引入缓存特性;
|
||||
实现postProcessGet,加载共享属性值;
|
||||
系统缓存统一改为Caffeine,移除Guava以减少程序包大小;
|
||||
ok 系统缓存统一改为Caffeine,移除Guava以减少程序包大小;
|
||||
添加更多内置图表插件:
|
||||
嵌套饼图
|
||||
地图热力图
|
||||
|
|
|
@ -24,9 +24,8 @@
|
|||
<artifactId>jackson-databind</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
<version>${guava.version}</version>
|
||||
<groupId>com.github.ben-manes.caffeine</groupId>
|
||||
<artifactId>caffeine</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.freemarker</groupId>
|
||||
|
|
|
@ -12,14 +12,13 @@ import java.io.Reader;
|
|||
import java.io.StringReader;
|
||||
import java.io.StringWriter;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.datagear.util.DateNumberFormat;
|
||||
|
||||
import com.google.common.cache.Cache;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.github.benmanes.caffeine.cache.Cache;
|
||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||
|
||||
import freemarker.cache.TemplateLoader;
|
||||
import freemarker.core.OutputFormat;
|
||||
|
@ -175,7 +174,7 @@ public class DataSetFmkTemplateResolver implements TemplateResolver
|
|||
{
|
||||
super();
|
||||
|
||||
this.nameTemplateCache = CacheBuilder.newBuilder().maximumSize(cacheCapacity)
|
||||
this.nameTemplateCache = Caffeine.newBuilder().maximumSize(cacheCapacity)
|
||||
.expireAfterAccess(cacheExpireSeconds, TimeUnit.SECONDS).build();
|
||||
}
|
||||
|
||||
|
@ -197,21 +196,14 @@ public class DataSetFmkTemplateResolver implements TemplateResolver
|
|||
@Override
|
||||
public Object findTemplateSource(String name) throws IOException
|
||||
{
|
||||
try
|
||||
return this.nameTemplateCache.get(name, new Function<String, NameTemplateSource>()
|
||||
{
|
||||
return this.nameTemplateCache.get(name, new Callable<NameTemplateSource>()
|
||||
@Override
|
||||
public NameTemplateSource apply(String name)
|
||||
{
|
||||
@Override
|
||||
public NameTemplateSource call() throws Exception
|
||||
{
|
||||
return new NameTemplateSource(name, System.currentTimeMillis());
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (ExecutionException e)
|
||||
{
|
||||
throw new IOException("find template source in cache exception", e);
|
||||
}
|
||||
return new NameTemplateSource(name, System.currentTimeMillis());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -23,9 +23,8 @@
|
|||
<artifactId>commons-dbcp2</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
<version>${guava.version}</version>
|
||||
<groupId>com.github.ben-manes.caffeine</groupId>
|
||||
<artifactId>caffeine</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
|
|
@ -16,26 +16,28 @@ import java.util.Collections;
|
|||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Function;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.apache.commons.dbcp2.BasicDataSource;
|
||||
import org.apache.commons.dbcp2.ConnectionFactory;
|
||||
import org.apache.commons.dbcp2.DriverConnectionFactory;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.datagear.util.JDBCCompatiblity;
|
||||
import org.datagear.util.JdbcUtil;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.google.common.cache.Cache;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.RemovalListener;
|
||||
import com.google.common.cache.RemovalNotification;
|
||||
import com.github.benmanes.caffeine.cache.Cache;
|
||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||
import com.github.benmanes.caffeine.cache.RemovalCause;
|
||||
import com.github.benmanes.caffeine.cache.RemovalListener;
|
||||
|
||||
/**
|
||||
* 默认{@linkplain ConnectionSource}实现。
|
||||
|
@ -71,7 +73,7 @@ public class DefaultConnectionSource implements ConnectionSource
|
|||
{
|
||||
super();
|
||||
this.driverEntityManager = driverEntityManager;
|
||||
this.internalDataSourceCache = CacheBuilder.newBuilder().maximumSize(50)
|
||||
this.internalDataSourceCache = Caffeine.newBuilder().maximumSize(50)
|
||||
.expireAfterAccess(60 * 24, TimeUnit.MINUTES)
|
||||
.removalListener(new DriverBasicDataSourceRemovalListener()).build();
|
||||
}
|
||||
|
@ -397,10 +399,10 @@ public class DefaultConnectionSource implements ConnectionSource
|
|||
try
|
||||
{
|
||||
dataSourceHolder = this.internalDataSourceCache.get(connectionIdentity,
|
||||
new Callable<InternalDataSourceHolder>()
|
||||
new Function<ConnectionIdentity, InternalDataSourceHolder>()
|
||||
{
|
||||
@Override
|
||||
public InternalDataSourceHolder call() throws Exception
|
||||
public InternalDataSourceHolder apply(ConnectionIdentity key)
|
||||
{
|
||||
DataSource dataSource = createInternalDataSource(driver, url, properties);
|
||||
InternalDataSourceHolder holder = new InternalDataSourceHolder();
|
||||
|
@ -661,14 +663,13 @@ public class DefaultConnectionSource implements ConnectionSource
|
|||
implements RemovalListener<ConnectionIdentity, InternalDataSourceHolder>
|
||||
{
|
||||
@Override
|
||||
public void onRemoval(RemovalNotification<ConnectionIdentity, InternalDataSourceHolder> notification)
|
||||
public void onRemoval(@Nullable ConnectionIdentity key, @Nullable InternalDataSourceHolder value,
|
||||
@NonNull RemovalCause cause)
|
||||
{
|
||||
InternalDataSourceHolder holder = notification.getValue();
|
||||
|
||||
if (!holder.hasDataSource())
|
||||
if (!value.hasDataSource())
|
||||
return;
|
||||
|
||||
DataSource dataSource = holder.getDataSource();
|
||||
DataSource dataSource = value.getDataSource();
|
||||
|
||||
if (!(dataSource instanceof DriverBasicDataSource))
|
||||
throw new UnsupportedOperationException(
|
||||
|
@ -680,7 +681,7 @@ public class DefaultConnectionSource implements ConnectionSource
|
|||
((DriverBasicDataSource) dataSource).close();
|
||||
|
||||
if (LOGGER.isDebugEnabled())
|
||||
LOGGER.debug("Close internal data source for {}", notification.getKey());
|
||||
LOGGER.debug("Close internal data source for {}", key);
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
|
|
|
@ -9,13 +9,12 @@ package org.datagear.web.util;
|
|||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import com.github.benmanes.caffeine.cache.CacheLoader;
|
||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||
import com.github.benmanes.caffeine.cache.LoadingCache;
|
||||
|
||||
/**
|
||||
* 消息通道。
|
||||
|
@ -32,7 +31,7 @@ public class MessageChannel
|
|||
|
||||
public MessageChannel()
|
||||
{
|
||||
this(60 * 10);
|
||||
this(60 * 60);
|
||||
}
|
||||
|
||||
public MessageChannel(int channelExpireSeconds)
|
||||
|
@ -40,7 +39,7 @@ public class MessageChannel
|
|||
super();
|
||||
|
||||
// 消息通道只允许超时,不允许被其他情况移除
|
||||
this._cache = CacheBuilder.newBuilder().maximumSize(Integer.MAX_VALUE)
|
||||
this._cache = Caffeine.newBuilder().maximumSize(Integer.MAX_VALUE)
|
||||
.expireAfterAccess(channelExpireSeconds, TimeUnit.SECONDS)
|
||||
.build(new CacheLoader<String, LinkedBlockingQueue<Object>>()
|
||||
{
|
||||
|
@ -113,7 +112,7 @@ public class MessageChannel
|
|||
{
|
||||
return this._cache.get(channel);
|
||||
}
|
||||
catch(ExecutionException e)
|
||||
catch (Throwable e)
|
||||
{
|
||||
throw new MessageChannelException(e);
|
||||
}
|
||||
|
|
|
@ -16,8 +16,8 @@ import java.util.concurrent.TimeUnit;
|
|||
import org.datagear.management.domain.Schema;
|
||||
import org.datagear.meta.Table;
|
||||
|
||||
import com.google.common.cache.Cache;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.github.benmanes.caffeine.cache.Cache;
|
||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||
|
||||
/**
|
||||
* {@linkplain Table}缓存。
|
||||
|
@ -65,8 +65,8 @@ public class TableCache
|
|||
*/
|
||||
public void init()
|
||||
{
|
||||
this._cache = CacheBuilder.newBuilder().maximumSize(this.maximumSize)
|
||||
.expireAfterAccess(this.expireAfterAccessMinutes * 60, TimeUnit.SECONDS).build();
|
||||
this._cache = Caffeine.newBuilder().maximumSize(this.maximumSize)
|
||||
.expireAfterAccess(this.expireAfterAccessMinutes, TimeUnit.MINUTES).build();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
1
pom.xml
1
pom.xml
|
@ -15,7 +15,6 @@
|
|||
<java.version>1.8</java.version>
|
||||
<springboot.version>2.4.6</springboot.version>
|
||||
<javax.json.version>1.0.4</javax.json.version>
|
||||
<guava.version>28.2-jre</guava.version>
|
||||
<commons-csv.version>1.4</commons-csv.version>
|
||||
<poi.version>3.17</poi.version>
|
||||
<poi-ooxml.version>3.17</poi-ooxml.version>
|
||||
|
|
Loading…
Reference in New Issue