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