forked from luyan/epmet-cloud-lingshan
11 changed files with 163 additions and 31 deletions
@ -0,0 +1,43 @@ |
|||||
|
package com.epmet.commons.dynamic.datasource.enums; |
||||
|
|
||||
|
/** |
||||
|
* 服务-数据源flag-数据源名称对应关系 |
||||
|
*/ |
||||
|
public enum DataSourceEnum { |
||||
|
|
||||
|
DATA_STATISTICAL_REAL("data-statistical-server", "real", "stats"), |
||||
|
DATA_STATISTICAL_FAKE("data-statistical-server", "fake", "statsDisplay"), |
||||
|
; |
||||
|
|
||||
|
private String serviceName; |
||||
|
private String flag; |
||||
|
private String dataSourceName; |
||||
|
|
||||
|
DataSourceEnum(String serviceName, String flag, String dataSourceName) { |
||||
|
this.serviceName = serviceName; |
||||
|
this.flag = flag; |
||||
|
this.dataSourceName = dataSourceName; |
||||
|
} |
||||
|
|
||||
|
public static DataSourceEnum getEnum(String serviceName, String flag) { |
||||
|
DataSourceEnum[] values = DataSourceEnum.values(); |
||||
|
for (DataSourceEnum value : values) { |
||||
|
if (value.serviceName.equals(serviceName) && value.flag.equals(flag)) { |
||||
|
return value; |
||||
|
} |
||||
|
} |
||||
|
return null; |
||||
|
} |
||||
|
|
||||
|
public String getServiceName() { |
||||
|
return serviceName; |
||||
|
} |
||||
|
|
||||
|
public String getFlag() { |
||||
|
return flag; |
||||
|
} |
||||
|
|
||||
|
public String getDataSourceName() { |
||||
|
return dataSourceName; |
||||
|
} |
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
package com.epmet.commons.dynamic.datasource.util; |
||||
|
|
||||
|
import com.epmet.commons.dynamic.datasource.enums.DataSourceEnum; |
||||
|
|
||||
|
public abstract class AbstractDataSourceNameFetcher { |
||||
|
|
||||
|
public abstract String fetchDataSourceName(); |
||||
|
|
||||
|
//protected String getDataSourceName(String dataType, String serviceName) {
|
||||
|
// return DataSourceEnum.getEnum(serviceName, dataType)
|
||||
|
//}
|
||||
|
|
||||
|
} |
@ -0,0 +1,44 @@ |
|||||
|
package com.epmet.commons.dynamic.datasource.util; |
||||
|
|
||||
|
import com.epmet.commons.dynamic.datasource.enums.DataSourceEnum; |
||||
|
import com.epmet.commons.tools.exception.RenException; |
||||
|
import org.apache.commons.lang3.StringUtils; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.core.env.Environment; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
import org.springframework.web.context.request.RequestContextHolder; |
||||
|
import org.springframework.web.context.request.ServletRequestAttributes; |
||||
|
|
||||
|
/** |
||||
|
* Http请求中获取数据源名称 |
||||
|
*/ |
||||
|
@Component |
||||
|
public class HttpRequestDataSourceNameFetcher extends AbstractDataSourceNameFetcher { |
||||
|
|
||||
|
protected Logger logger = LoggerFactory.getLogger(getClass()); |
||||
|
|
||||
|
@Autowired |
||||
|
private Environment environment; |
||||
|
|
||||
|
@Override |
||||
|
public String fetchDataSourceName() { |
||||
|
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); |
||||
|
javax.servlet.http.HttpServletRequest request = requestAttributes.getRequest(); |
||||
|
String dataType = request.getHeader("Data-Type"); |
||||
|
|
||||
|
logger.info("HttpRequestDataSourceNameFetcher获取到的DataType为:{}", dataType); |
||||
|
if (StringUtils.isBlank(dataType)) { |
||||
|
return null; |
||||
|
} |
||||
|
|
||||
|
String serviceName = environment.getProperty("spring.application.name"); |
||||
|
DataSourceEnum dataSourceEnum = DataSourceEnum.getEnum(serviceName, dataType); |
||||
|
if (dataSourceEnum == null) { |
||||
|
throw new RenException(String.format("根据前端传入的DataType[%s]无法找到对应的数据源。", dataType)); |
||||
|
} |
||||
|
logger.info("HttpRequestDataSourceNameFetcher根据DataType:[{}]获取到的DataSourceEnum为{}", dataType, dataSourceEnum.getDataSourceName()); |
||||
|
return dataSourceEnum.getDataSourceName(); |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue