Commit 2a9ba63c by 李秋伟

Merge branch 'feature_protocol' into 'master'

删除spring依赖

See merge request mall/arch/matrix!42
parents 95a60897 08950868
...@@ -2,14 +2,13 @@ package com.secoo.mall.datasource.bean; ...@@ -2,14 +2,13 @@ package com.secoo.mall.datasource.bean;
import com.secoo.mall.common.core.exception.BusinessException; import com.secoo.mall.common.core.exception.BusinessException;
import com.secoo.mall.datasource.errorcode.DataSourceError; import com.secoo.mall.datasource.errorcode.DataSourceError;
import com.secoo.mall.datasource.factory.ServiceLoaderFactory;
import com.secoo.mall.datasource.provider.DataSourceProvider; import com.secoo.mall.datasource.provider.DataSourceProvider;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.jdbc.datasource.AbstractDataSource; import org.springframework.jdbc.datasource.AbstractDataSource;
import javax.annotation.Resource;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.sql.Connection; import java.sql.Connection;
...@@ -20,13 +19,17 @@ import java.util.concurrent.locks.Lock; ...@@ -20,13 +19,17 @@ import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
@Slf4j @Slf4j
public abstract class AbsDataSource extends AbstractDataSource implements InitializingBean, DisposableBean { public abstract class AbsDataSource extends AbstractDataSource implements DisposableBean {
@Getter @Getter
private Map<String, DataSource> dataSourceMap = new HashMap<>(); private Map<String, DataSource> dataSourceMap = new HashMap<>();
private static Lock lock = new ReentrantLock(); private static Lock lock = new ReentrantLock();
@Resource
private DataSourceProvider dataSourceProvider; private DataSourceProvider dataSourceProvider = ServiceLoaderFactory.getInstance(DataSourceProvider.class);
public AbsDataSource() {
loadDataSources();
}
@Override @Override
public Connection getConnection() throws SQLException { public Connection getConnection() throws SQLException {
...@@ -52,8 +55,8 @@ public abstract class AbsDataSource extends AbstractDataSource implements Initia ...@@ -52,8 +55,8 @@ public abstract class AbsDataSource extends AbstractDataSource implements Initia
throw new BusinessException(DataSourceError.DATA_SOURCE_NOT_EXIST, dsName); throw new BusinessException(DataSourceError.DATA_SOURCE_NOT_EXIST, dsName);
} }
/*
/** ***
* bean销毁 * bean销毁
* *
* @throws Exception * @throws Exception
...@@ -75,21 +78,6 @@ public abstract class AbsDataSource extends AbstractDataSource implements Initia ...@@ -75,21 +78,6 @@ public abstract class AbsDataSource extends AbstractDataSource implements Initia
log.info("datasource all closed success"); log.info("datasource all closed success");
} }
/**
* 数据加载
*
* @throws Exception
*/
@Override
public void afterPropertiesSet() throws Exception {
Map<String, DataSource> dataSourceMap = dataSourceProvider.loadDataSources();
for (Map.Entry<String, DataSource> dataSourceEntry : dataSourceMap.entrySet()) {
addDataSource(dataSourceEntry.getKey(), dataSourceEntry.getValue());
}
}
public void addDataSource(String dsName, DataSource dataSource) { public void addDataSource(String dsName, DataSource dataSource) {
lock.lock(); lock.lock();
log.info("load dataSources lock {}", dsName); log.info("load dataSources lock {}", dsName);
...@@ -118,5 +106,12 @@ public abstract class AbsDataSource extends AbstractDataSource implements Initia ...@@ -118,5 +106,12 @@ public abstract class AbsDataSource extends AbstractDataSource implements Initia
} }
private void loadDataSources() {
Map<String, DataSource> dataSourceMap = dataSourceProvider.loadDataSources();
for (Map.Entry<String, DataSource> dataSourceEntry : dataSourceMap.entrySet()) {
addDataSource(dataSourceEntry.getKey(), dataSourceEntry.getValue());
}
}
protected abstract DataSource getDataSource(); protected abstract DataSource getDataSource();
} }
package com.secoo.mall.datasource.bean; package com.secoo.mall.datasource.bean;
import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.sql.DataSource; import javax.sql.DataSource;
...@@ -8,11 +9,16 @@ import javax.sql.DataSource; ...@@ -8,11 +9,16 @@ import javax.sql.DataSource;
* 此数据源为指定数据源,支持xml进行定义 * 此数据源为指定数据源,支持xml进行定义
*/ */
@Slf4j @Slf4j
@Data
public class MatrixDataSource extends AbsDataSource { public class MatrixDataSource extends AbsDataSource {
private String dsName; private String dsName;
public MatrixDataSource(){
}
public MatrixDataSource(String dsName) { public MatrixDataSource(String dsName) {
this.dsName = dsName; this.dsName = dsName;
} }
......
package com.secoo.mall.datasource.factory; package com.secoo.mall.datasource.factory;
import com.ctrip.framework.apollo.build.ApolloInjector;
import com.ctrip.framework.apollo.util.ConfigUtil;
import com.secoo.mall.app.security.encryptor.Encryptor; import com.secoo.mall.app.security.encryptor.Encryptor;
import com.secoo.mall.common.constant.CharConstant; import com.secoo.mall.common.constant.CharConstant;
import com.secoo.mall.common.core.classloader.MatrixUrlClassLoader; import com.secoo.mall.common.core.classloader.MatrixUrlClassLoader;
...@@ -7,7 +9,6 @@ import com.secoo.mall.common.core.exception.BusinessException; ...@@ -7,7 +9,6 @@ import com.secoo.mall.common.core.exception.BusinessException;
import com.secoo.mall.common.util.file.IOUtil; import com.secoo.mall.common.util.file.IOUtil;
import com.secoo.mall.common.util.net.IpUtil; import com.secoo.mall.common.util.net.IpUtil;
import com.secoo.mall.common.util.string.StringUtil; import com.secoo.mall.common.util.string.StringUtil;
import com.secoo.mall.common.util.sys.SystemUtil;
import com.secoo.mall.datasource.constant.DataSourceConstant; import com.secoo.mall.datasource.constant.DataSourceConstant;
import com.secoo.mall.datasource.errorcode.DataSourceError; import com.secoo.mall.datasource.errorcode.DataSourceError;
import com.secoo.mall.datasource.util.SysUtil; import com.secoo.mall.datasource.util.SysUtil;
...@@ -21,7 +22,7 @@ import java.util.Objects; ...@@ -21,7 +22,7 @@ import java.util.Objects;
@Slf4j @Slf4j
public class EncryptorFactory<T> { public class EncryptorFactory<T> {
private final ConfigUtil configUtil = ApolloInjector.getInstance(ConfigUtil.class);
private volatile static EncryptorFactory instance; private volatile static EncryptorFactory instance;
private Encryptor<T> encryptor; private Encryptor<T> encryptor;
private final String privateKey = initPrivateKey(); private final String privateKey = initPrivateKey();
...@@ -59,7 +60,7 @@ public class EncryptorFactory<T> { ...@@ -59,7 +60,7 @@ public class EncryptorFactory<T> {
* @return * @return
*/ */
private String initPrivateKey() { private String initPrivateKey() {
String appId = SystemUtil.APP_ID; String appId = configUtil.getAppId();
if (StringUtil.isEmpty(appId)) { if (StringUtil.isEmpty(appId)) {
throw new BusinessException(DataSourceError.APP_ID_NOT_EXIST); throw new BusinessException(DataSourceError.APP_ID_NOT_EXIST);
} }
......
package com.secoo.mall.datasource.factory;
import com.ctrip.framework.foundation.internals.ServiceBootstrap;
import com.secoo.mall.common.core.exception.SystemInternalException;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
@Slf4j
public class ServiceLoaderFactory {
private static final Object lock = new Object();
//存放singleton对象的缓存
private static final Map<String, Object> singletonObjectMap = new ConcurrentHashMap<>();
public static <T> T getInstance(Class<T> clazz) {
String simpleName = clazz.getSimpleName();
Object singleObject = singletonObjectMap.get(simpleName);
if (Objects.isNull(singleObject)) {
synchronized (lock) {
singleObject = singletonObjectMap.get(simpleName);
if (Objects.isNull(singleObject)) {
try {
singleObject = ServiceBootstrap.loadFirst(clazz);
singletonObjectMap.put(simpleName, singleObject);
} catch (Throwable ex) {
log.error("getInstance e:", ex);
throw new SystemInternalException();
}
}
}
}
return (T) singleObject;
}
}
...@@ -7,8 +7,8 @@ import com.secoo.mall.datasource.config.MatrixDataSourceConfig; ...@@ -7,8 +7,8 @@ import com.secoo.mall.datasource.config.MatrixDataSourceConfig;
import com.secoo.mall.datasource.constant.DataSourceConstant; import com.secoo.mall.datasource.constant.DataSourceConstant;
import com.secoo.mall.datasource.factory.DataSourceFactory; import com.secoo.mall.datasource.factory.DataSourceFactory;
import com.secoo.mall.datasource.factory.EncryptorFactory; import com.secoo.mall.datasource.factory.EncryptorFactory;
import com.secoo.mall.datasource.factory.ServiceLoaderFactory;
import javax.annotation.Resource;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.lang.reflect.ParameterizedType; import java.lang.reflect.ParameterizedType;
import java.util.List; import java.util.List;
...@@ -16,10 +16,8 @@ import java.util.Map; ...@@ -16,10 +16,8 @@ import java.util.Map;
public abstract class AbsDataSourceProvider<T extends MatrixDataSourceConfig> implements DataSourceProvider { public abstract class AbsDataSourceProvider<T extends MatrixDataSourceConfig> implements DataSourceProvider {
private Encryptor<String> encryptor; private Encryptor<String> encryptor;
@Resource private DataSourceFactory dataSourceFactory = ServiceLoaderFactory.getInstance(DataSourceFactory.class);
private DataSourceFactory dataSourceFactory;
private Class<T> entryClass; private Class<T> entryClass;
......
...@@ -3,12 +3,10 @@ package com.secoo.mall.datasource.factory; ...@@ -3,12 +3,10 @@ package com.secoo.mall.datasource.factory;
import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSource;
import com.secoo.mall.datasource.properties.MatrixDruidDataSourceProperties; import com.secoo.mall.datasource.properties.MatrixDruidDataSourceProperties;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.sql.SQLException; import java.sql.SQLException;
@Slf4j @Slf4j
@Component
public class DruidDataSourceFactory extends AbsDataSourceFactory<DruidDataSource, MatrixDruidDataSourceProperties> { public class DruidDataSourceFactory extends AbsDataSourceFactory<DruidDataSource, MatrixDruidDataSourceProperties> {
private final String FREFIX = "druid."; private final String FREFIX = "druid.";
......
package com.secoo.mall.datasource.provider; package com.secoo.mall.datasource.provider;
import com.secoo.mall.datasource.properties.MatrixDruidDataSourceProperties; import com.secoo.mall.datasource.properties.MatrixDruidDataSourceProperties;
import org.springframework.stereotype.Component;
@Component
public class ApolloDruidDataSourceProvider extends ApolloDataSourceProvider<MatrixDruidDataSourceProperties> { public class ApolloDruidDataSourceProvider extends ApolloDataSourceProvider<MatrixDruidDataSourceProperties> {
} }
com.secoo.mall.datasource.provider.ApolloDruidDataSourceProvider
\ No newline at end of file
...@@ -43,10 +43,6 @@ ...@@ -43,10 +43,6 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.secoo.mall</groupId> <groupId>com.secoo.mall</groupId>
<artifactId>common-core</artifactId>
</dependency>
<dependency>
<groupId>com.secoo.mall</groupId>
<artifactId>common-util</artifactId> <artifactId>common-util</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment