com.dangdang.ddframe.job.lite.console.domain.EventTraceDataSourceFactory Maven / Gradle / Ivy
The newest version!
package com.dangdang.ddframe.job.lite.console.domain;
import com.google.common.base.Charsets;
import com.google.common.base.Optional;
import com.google.common.base.Strings;
import com.google.common.hash.HashCode;
import com.google.common.hash.Hasher;
import com.google.common.hash.Hashing;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import java.util.concurrent.ConcurrentHashMap;
/**
* 事件追踪数据源工厂.
*
* @author zhangxinguo
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class EventTraceDataSourceFactory {
private static final ConcurrentHashMap DATA_SOURCE_REGISTRY = new ConcurrentHashMap<>();
/**
* 创建事件追踪数据源.
*
* @param driver 数据库驱动类名称
* @param url 数据库URL
* @param username 数据库用户名
* @param password 数据库密码
* @return 事件追踪数据源
*/
public static EventTraceDataSource createEventTraceDataSource(final String driver, final String url, final String username, final Optional password) {
Hasher hasher = Hashing.md5().newHasher().putString(driver, Charsets.UTF_8).putString(url, Charsets.UTF_8);
if (!Strings.isNullOrEmpty(username)) {
hasher.putString(username, Charsets.UTF_8);
}
if (password.isPresent()) {
hasher.putString(password.get(), Charsets.UTF_8);
}
HashCode hashCode = hasher.hash();
EventTraceDataSource result = DATA_SOURCE_REGISTRY.get(hashCode);
if (null != result) {
return result;
}
EventTraceDataSourceConfiguration eventTraceDataSourceConfiguration = new EventTraceDataSourceConfiguration(driver, url, username);
if (password.isPresent()) {
eventTraceDataSourceConfiguration.setPassword(password.get());
}
result = new EventTraceDataSource(eventTraceDataSourceConfiguration);
result.init();
DATA_SOURCE_REGISTRY.put(hashCode, result);
return result;
}
}