Skip to content

Commit

Permalink
Merge pull request #158 from yg3630536/feature/data-async
Browse files Browse the repository at this point in the history
* add propertiesService for sdk
  • Loading branch information
chenhaozx committed Apr 11, 2020
2 parents d4dc61c + 45a2e22 commit cdb33f6
Show file tree
Hide file tree
Showing 10 changed files with 343 additions and 66 deletions.
16 changes: 12 additions & 4 deletions src/main/java/com/webank/weid/constant/DataDriverConstant.java
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,14 @@ public final class DataDriverConstant {
public static final String JDBC_NUM_TEST_PER_ER = "jdbc.numTestsPerEvictionRun";

/**
* jdbc maxWait properties.
* jdbc minEvictableIdleTimeMillis properties.
*/
public static final String JDBC_MIN_EITM = "jdbc.minEvictableIdleTimeMillis";

/**
* jdbc initialSize properties.
*/
public static final String JDBC_INIT_SIZE = "jdbc.initialSize";

/**
* jdbc driverClassName.
Expand Down Expand Up @@ -148,11 +153,13 @@ public final class DataDriverConstant {
public static final String POOL_URL = "url";
public static final String POOL_USERNAME = "username";
public static final String POOL_PASSWORD = "password";
public static final String POOL_MAX_ACTIVE = "maxActive";
public static final String POOL_INITIAL_SIZE = "initialSize";
public static final String POOL_MAX_ACTIVE = "maxTotal";
public static final String POOL_MIN_IDLE = "minIdle";
public static final String POOL_MAX_IDLE = "maxIdle";
public static final String POOL_MAX_WAIT = "maxWait";
public static final String POOL_MAX_REMOVE_ABANDONED = "removeAbandoned";
public static final String POOL_MAX_WAIT = "maxWaitMillis";
public static final String POOL_MAX_REMOVE_ABANDONED = "removeAbandonedOnBorrow";
public static final String POOL_MAX_REMOVE_MAINTENANCE = "removeAbandonedOnMaintenance";
public static final String POOL_MAX_REMOVE_ABANDONED_TIMEOUT = "removeAbandonedTimeout";
public static final String POOL_TEST_ON_BORROW = "testOnBorrow";
public static final String POOL_TEST_ON_WHILE = "testWhileIdle";
Expand All @@ -167,6 +174,7 @@ public final class DataDriverConstant {
public static final String POOL_DRIVER_NAME_DEFAULT_VALUE = "com.mysql.jdbc.Driver";
public static final String POOL_MAX_ACTIVE_DEFAULT_VALUE = "50";
public static final String POOL_MIN_IDLE_DEFAULT_VALUE = "5";
public static final String POOL_INIT_DEFAULT_VALUE = "5";
public static final String POOL_MAX_IDLE_DEFAULT_VALUE = "5";
public static final String POOL_MAX_WAIT_DEFAULT_VALUE = "10000";
public static final String POOL_NUM_TEST_PER_ER_DEFAULT_VALUE = "5";
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/com/webank/weid/constant/ParamKeyConstant.java
Original file line number Diff line number Diff line change
Expand Up @@ -96,4 +96,17 @@ public final class ParamKeyConstant {
public static final String WEID_AUTH_CHALLENGE = "challenge";

public static final String TRNSACTION_RECEIPT_STATUS_SUCCESS = "0x0";

/**
* 内置配置Key.
*/
public static final String RSYNC_IP = "rsyncIp";
public static final String RSYNC_PORT = "rsyncPort";
public static final String RSYNC_USER = "rsyncUser";
public static final String RSYNC_PWD_NAME = "rsyncPwdName";
public static final String RSYNC_BIN_LOG_MODULE = "binLog";
public static final String BIN_LOG_PATH = "binLogPath";
public static final String ENABLE_OFFLINE = "enableOffLine";
public static final String INTEVAL_PERIOD = "inteval_period";

}
Original file line number Diff line number Diff line change
Expand Up @@ -738,9 +738,8 @@ private static UserResult makeCredential(

Map<String, String> credentialInfoMap = buildCredentialInfo(preCredential, claimJson);

ResponseData<CredentialTemplateEntity> resp = getCptService()
.queryCredentialTemplate(cptId);
CredentialTemplateEntity credentialTemplate = resp.getResult();
ResponseData<CredentialTemplateEntity> res = getCptService().queryCredentialTemplate(cptId);
CredentialTemplateEntity credentialTemplate = res.getResult();

UserResult userResult = UserClient.makeCredential(credentialInfoMap, credentialTemplate);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,10 @@
import com.webank.weid.protocol.base.WeIdDocument;
import com.webank.weid.protocol.response.GetEncryptKeyResponse;
import com.webank.weid.protocol.response.ResponseData;
import com.webank.weid.rpc.WeIdService;
import com.webank.weid.service.impl.WeIdServiceImpl;
import com.webank.weid.suite.api.persistence.Persistence;
import com.webank.weid.suite.api.transportation.params.EncodeType;
import com.webank.weid.suite.crypto.CryptServiceFactory;
import com.webank.weid.suite.entity.CryptType;
import com.webank.weid.suite.entity.TransCodeBaseData;
import com.webank.weid.suite.persistence.sql.driver.MysqlDriver;
import com.webank.weid.suite.transmission.TransmissionService;
import com.webank.weid.util.DataToolUtils;

Expand All @@ -53,28 +49,10 @@
* @author yanggang
*
*/
public class DownTransDataService implements TransmissionService<String> {
public class DownTransDataService extends InnerService implements TransmissionService<String> {

private static final Logger logger = LoggerFactory.getLogger(DownTransDataService.class);

private Persistence dataDriver;

private WeIdService weidService;

private WeIdService getWeIdService() {
if (weidService == null) {
weidService = new WeIdServiceImpl();
}
return weidService;
}

private Persistence getDataDriver() {
if (dataDriver == null) {
dataDriver = new MysqlDriver();
}
return dataDriver;
}

@Override
public ResponseData<String> service(String message) {
try {
Expand Down
27 changes: 27 additions & 0 deletions src/main/java/com/webank/weid/service/impl/inner/InnerService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.webank.weid.service.impl.inner;

import com.webank.weid.rpc.WeIdService;
import com.webank.weid.service.impl.WeIdServiceImpl;
import com.webank.weid.suite.api.persistence.Persistence;
import com.webank.weid.suite.persistence.sql.driver.MysqlDriver;

public abstract class InnerService {

private Persistence dataDriver;

private WeIdService weidService;

protected WeIdService getWeIdService() {
if (weidService == null) {
weidService = new WeIdServiceImpl();
}
return weidService;
}

protected Persistence getDataDriver() {
if (dataDriver == null) {
dataDriver = new MysqlDriver();
}
return dataDriver;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
package com.webank.weid.service.impl.inner;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ConcurrentHashMap;

import org.apache.commons.lang3.StringUtils;

import com.webank.weid.constant.DataDriverConstant;
import com.webank.weid.constant.ErrorCode;
import com.webank.weid.constant.ParamKeyConstant;
import com.webank.weid.protocol.response.ResponseData;
import com.webank.weid.util.DataToolUtils;

/**
* 读取存入数据库中的配置.
*
* @author yanggang
*
*/
public class PropertiesService extends InnerService {

private static PropertiesService instance;

// 存放内置配置得对象
private static ConcurrentHashMap<String, String> properties = new ConcurrentHashMap<>();
private static final String KEY = "aa6d69cde0904d2aad1713d75cafa718";
private static final String DOMAIN = DataDriverConstant.DOMAIN_DEFAULT_INFO;
private static final Long DEFAULT_INTEVAL_PERIOD = 60L * 5 * 1000;
private static Timer timer;
private static Long prevIntevalPeriod = DEFAULT_INTEVAL_PERIOD;

PropertiesService() {
load();
}

/**
* 单例模式.
*
* @return 返回配置对象
*/
public static PropertiesService getInstance() {
if (instance == null) {
synchronized (PropertiesService.class) {
if (instance == null) {
instance = new PropertiesService();
startMonitor();
}
}
}
return instance;
}

/**
* 启动监听, 定时刷新配置.
*/
private static void startMonitor() {
Long intevalPeriod = getIntevalPeriod();
if (intevalPeriod == null) {
intevalPeriod = DEFAULT_INTEVAL_PERIOD;
}
prevIntevalPeriod = intevalPeriod;
TimerTask task = new TimerTask() {
@Override
public void run() {
instance.load();
}
};
timer = new Timer();
timer.scheduleAtFixedRate(task, 0, intevalPeriod);
}

private static void reStartMonitor() {
timer.cancel();
startMonitor();
}

// 获取配置的调度时间
private static Long getIntevalPeriod() {
String intevalPeriodStr = instance.getProperty(ParamKeyConstant.INTEVAL_PERIOD);
if (StringUtils.isNotBlank(intevalPeriodStr)) {
return Long.valueOf(intevalPeriodStr);
}
return null;
}

/**
* 根据key获取配置值.
*
* @param key 传入需要获取的配置key
* @return 返回配置值
*/
public String getProperty(String key) {
return properties.get(key);
}

/**
* 根据key获取配置值,如果配置值为null,则返回默认值defaultValue.
*
* @param key 传入需要获取的配置key
* @param defaultValue 当获取到的值为null时的默认值
* @return 返回配置值
*/
public String getProperty(String key, String defaultValue) {
String value = getProperty(key);
return value != null ? value : defaultValue;
}

/**
* 获取所有的配置项.
*
* @return 返回所有的配置值
*/
public Map<String, String> getAllProperty() {
Map<String, String> result = new HashMap<String, String>();
result.putAll(properties);
return result;
}

/**
* 更新properties缓存数据,后续可以用于定时更新.
*/
private void load() {
synchronized (properties) {
Map<String, String> query = query();
properties.clear();
properties.putAll(query);
if (instance != null) {
Long intevalPeriod = getIntevalPeriod();
if (intevalPeriod != null
&& intevalPeriod.longValue() != prevIntevalPeriod.longValue()) {
reStartMonitor();
}
}
}
}

/**
* 向数据库中添加配置集合.
*
* @param data 存入的配置数据
* @return 返回添加结果
*/
public boolean addProperties(Map<String, String> data) {
synchronized (properties) {
Map<String, String> query = this.query();
query.putAll(data);
if (this.save(query)) {
// 同步配置到内存
load();
return true;
}
return false;
}
}

/**
* 删除数据库中指定集合配置.
*
* @param data 要删除得key集合
* @return 返回删除结果
*/
public synchronized boolean removeProperties(Set<String> data) {
synchronized (properties) {
// 查询数据库中得配置
Map<String, String> query = this.query();
// 删除对应的key
for (String string : data) {
query.remove(string);
}
// 更新到数据库中
if (this.save(query)) {
// 同步配置到内存
load();
return true;
}
return false;
}
}

private Map<String, String> query() {
Map<String, String> map = new HashMap<String, String>();
ResponseData<String> responseData = super.getDataDriver().get(DOMAIN, KEY);
if (StringUtils.isNotBlank(responseData.getResult())) {
map = DataToolUtils.deserialize(responseData.getResult(), Map.class);
}
return map;
}

private boolean save(Map<String, String> data) {
String value = DataToolUtils.serialize(data);
ResponseData<Integer> update = super.getDataDriver().saveOrUpdate(DOMAIN, KEY, value);
if (update.getErrorCode().intValue() == ErrorCode.SUCCESS.getCode()) {
return true;
}
return false;
}
}

0 comments on commit cdb33f6

Please sign in to comment.