增加SourceChangeable
This commit is contained in:
@@ -18,7 +18,7 @@ import org.redkale.util.*;
|
||||
@AutoLoad(false)
|
||||
@SuppressWarnings("unchecked")
|
||||
@ResourceType(CacheSource.class)
|
||||
public abstract class AbstractCacheSource extends AbstractService implements CacheSource, AutoCloseable, Resourcable {
|
||||
public abstract class AbstractCacheSource extends AbstractService implements CacheSource, AutoCloseable, Resourcable, SourceChangeable {
|
||||
|
||||
//@since 2.7.0
|
||||
public static final String CACHE_SOURCE_URL = "url";
|
||||
|
||||
@@ -30,7 +30,7 @@ import org.redkale.util.*;
|
||||
@AutoLoad(false)
|
||||
@SuppressWarnings("unchecked")
|
||||
@ResourceType(DataSource.class)
|
||||
public abstract class AbstractDataSource extends AbstractService implements DataSource, AutoCloseable, Resourcable {
|
||||
public abstract class AbstractDataSource extends AbstractService implements DataSource, AutoCloseable, Resourcable, SourceChangeable {
|
||||
|
||||
//@since 2.7.0 格式: x.x.x.x:yyyy
|
||||
public static final String DATA_SOURCE_PROXY_ADDRESS = "proxy-address";
|
||||
|
||||
@@ -62,6 +62,10 @@ public final class CacheMemorySource extends AbstractCacheSource {
|
||||
return "memory";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChange(ResourceEvent[] events) {
|
||||
}
|
||||
|
||||
public static boolean acceptsConf(AnyValue config) {
|
||||
return config.getValue(CACHE_SOURCE_URL).startsWith("memory:");
|
||||
}
|
||||
|
||||
@@ -48,6 +48,11 @@ public class DataJdbcSource extends DataSqlSource {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChange(ResourceEvent[] events) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy(AnyValue config) {
|
||||
if (readPool != null) readPool.close();
|
||||
@@ -1079,7 +1084,7 @@ public class DataJdbcSource extends DataSqlSource {
|
||||
};
|
||||
}
|
||||
|
||||
protected class ConnectionPool implements AutoCloseable {
|
||||
protected class ConnectionPool implements AutoCloseable, SourceChangeable {
|
||||
|
||||
protected final LongAdder closeCounter = new LongAdder(); //已关闭连接数
|
||||
|
||||
@@ -1095,7 +1100,7 @@ public class DataJdbcSource extends DataSqlSource {
|
||||
|
||||
protected final Properties connectAttrs;
|
||||
|
||||
protected final ArrayBlockingQueue<Connection> queue;
|
||||
protected ArrayBlockingQueue<Connection> queue;
|
||||
|
||||
protected int connectTimeoutSeconds;
|
||||
|
||||
@@ -1120,6 +1125,23 @@ public class DataJdbcSource extends DataSqlSource {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChange(ResourceEvent[] events) {
|
||||
for (ResourceEvent event : events) {
|
||||
if (event.name().equals(DATA_SOURCE_CONNECTTIMEOUT_SECONDS) || event.name().endsWith("." + DATA_SOURCE_CONNECTTIMEOUT_SECONDS)) {
|
||||
this.connectTimeoutSeconds = Integer.decode(event.newValue().toString());
|
||||
} else if (event.name().equals(DATA_SOURCE_URL) || event.name().endsWith("." + DATA_SOURCE_URL)) {
|
||||
this.url = event.newValue().toString();
|
||||
} else if (event.name().equals(DATA_SOURCE_USER) || event.name().endsWith("." + DATA_SOURCE_USER)) {
|
||||
this.connectAttrs.put("user", event.newValue().toString());
|
||||
} else if (event.name().equals(DATA_SOURCE_PASSWORD) || event.name().endsWith("." + DATA_SOURCE_PASSWORD)) {
|
||||
this.connectAttrs.put("password", event.newValue().toString());
|
||||
} else if (event.name().equals(DATA_SOURCE_MAXCONNS) || event.name().endsWith("." + DATA_SOURCE_MAXCONNS)) {
|
||||
logger.log(Level.WARNING, event.name() + " (new-value: " + event.newValue() + ") will not take effect");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized Connection pollConnection() {
|
||||
Connection conn = queue.poll();
|
||||
if (conn == null) {
|
||||
|
||||
@@ -43,6 +43,10 @@ public class DataMemorySource extends DataSqlSource implements SearchSource {
|
||||
return "memory";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChange(ResourceEvent[] events) {
|
||||
}
|
||||
|
||||
public static boolean acceptsConf(AnyValue config) {
|
||||
return config.getValue(DATA_SOURCE_URL).startsWith("memory:");
|
||||
}
|
||||
@@ -56,8 +60,8 @@ public class DataMemorySource extends DataSqlSource implements SearchSource {
|
||||
return getClass().getSimpleName() + "{type=memory, name='" + resourceName() + "'}";
|
||||
}
|
||||
|
||||
@Override
|
||||
@Local
|
||||
@Override
|
||||
public <T> void compile(Class<T> clazz) {
|
||||
EntityInfo entityInfo = EntityInfo.compile(clazz, this);
|
||||
if (entityInfo.getCache() == null) new EntityCache<>(entityInfo, null).clear();
|
||||
|
||||
@@ -150,6 +150,10 @@ public abstract class DataSqlSource extends AbstractDataSource implements Functi
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChange(ResourceEvent[] events) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
if (readConfProps == null) return getClass().getSimpleName() + "{}"; //compileMode模式下会为null
|
||||
|
||||
22
src/main/java/org/redkale/source/SourceChangeable.java
Normal file
22
src/main/java/org/redkale/source/SourceChangeable.java
Normal file
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
*
|
||||
*/
|
||||
package org.redkale.source;
|
||||
|
||||
import org.redkale.util.ResourceEvent;
|
||||
|
||||
/**
|
||||
* 资源变更回调接口
|
||||
*
|
||||
* <p>
|
||||
* 详情见: https://redkale.org
|
||||
*
|
||||
* @author zhangjx
|
||||
*
|
||||
* @since 2.8.0
|
||||
*/
|
||||
public interface SourceChangeable {
|
||||
|
||||
public void onChange(ResourceEvent[] events);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user