This is an automated email from the ASF dual-hosted git repository.
zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 1bdabc6 fix spring boot 2.x reads an environment variable exception !
(#8329)
1bdabc6 is described below
commit 1bdabc640636ad23682baa373847a3f55aa2d2c6
Author: xiaoyu <[email protected]>
AuthorDate: Wed Nov 25 12:52:58 2020 +0800
fix spring boot 2.x reads an environment variable exception ! (#8329)
---
.../boot/datasource/DataSourceMapSetter.java | 31 +++++++++++-----------
.../AbstractAlgorithmProvidedBeanRegistry.java | 31 +++++++++++++++-------
2 files changed, 36 insertions(+), 26 deletions(-)
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-spring-infra/shardingsphere-jdbc-spring-boot-starter-infra/src/main/java/org/apache/shardingsphere/spring/boot/datasource/DataSourceMapSetter.java
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-spring-infra/shardingsphere-jdbc-spring-boot-starter-infra/src/main/java/org/apache/shardingsphere/spring/boot/datasource/DataSourceMapSetter.java
index fdf57b0..a954209 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-spring-infra/shardingsphere-jdbc-spring-boot-starter-infra/src/main/java/org/apache/shardingsphere/spring/boot/datasource/DataSourceMapSetter.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-spring-infra/shardingsphere-jdbc-spring-boot-starter-infra/src/main/java/org/apache/shardingsphere/spring/boot/datasource/DataSourceMapSetter.java
@@ -60,13 +60,11 @@ public final class DataSourceMapSetter {
* @param environment spring boot environment
* @return data source map
*/
- @SuppressWarnings("unchecked")
public static Map<String, DataSource> getDataSourceMap(final Environment
environment) {
Map<String, DataSource> result = new LinkedHashMap<>();
- Map<String, Object> dataSourceCommonProps =
PropertyUtil.handle(environment, COMMON_PREFIX, Map.class);
- for (String each : getDataSourceNames(environment, PREFIX)) {
+ for (String each : getDataSourceNames(environment)) {
try {
- result.put(each, getDataSource(environment, PREFIX, each,
dataSourceCommonProps));
+ result.put(each, getDataSource(environment, each));
} catch (final ReflectiveOperationException ex) {
throw new ShardingSphereException("Can't find data source
type.", ex);
} catch (final NamingException ex) {
@@ -76,37 +74,38 @@ public final class DataSourceMapSetter {
return result;
}
- private static List<String> getDataSourceNames(final Environment
environment, final String prefix) {
+ private static List<String> getDataSourceNames(final Environment
environment) {
StandardEnvironment standardEnv = (StandardEnvironment) environment;
standardEnv.setIgnoreUnresolvableNestedPlaceholders(true);
- String dataSourceNames = standardEnv.getProperty(prefix +
DATA_SOURCE_NAME);
+ String dataSourceNames = standardEnv.getProperty(PREFIX +
DATA_SOURCE_NAME);
if (StringUtils.isEmpty(dataSourceNames)) {
- dataSourceNames = standardEnv.getProperty(prefix +
DATA_SOURCE_NAMES);
+ dataSourceNames = standardEnv.getProperty(PREFIX +
DATA_SOURCE_NAMES);
}
return new InlineExpressionParser(dataSourceNames).splitAndEvaluate();
}
- @SuppressWarnings("unchecked")
- private static DataSource getDataSource(final Environment environment,
final String prefix, final String dataSourceName,
- final Map<String, Object>
dataSourceCommonProps) throws ReflectiveOperationException, NamingException {
- Map<String, Object> dataSourceProps =
mergedDataSourceProps(PropertyUtil.handle(environment, prefix +
dataSourceName.trim(), Map.class), dataSourceCommonProps);
+ private static DataSource getDataSource(final Environment environment,
final String dataSourceName) throws ReflectiveOperationException,
NamingException {
+ Map<String, Object> dataSourceProps = mergedDataSourceProps(PREFIX +
dataSourceName.trim(), environment);
Preconditions.checkState(!dataSourceProps.isEmpty(),
String.format("Wrong datasource [%s] properties.", dataSourceName));
if (dataSourceProps.containsKey(JNDI_NAME)) {
return
getJNDIDataSource(dataSourceProps.get(JNDI_NAME).toString());
}
DataSource result =
DataSourceUtil.getDataSource(dataSourceProps.get(DATA_SOURCE_TYPE).toString(),
dataSourceProps);
DataSourcePropertiesSetterHolder.getDataSourcePropertiesSetterByType(dataSourceProps.get(DATA_SOURCE_TYPE).toString()).ifPresent(
- propsSetter -> propsSetter.propertiesSet(environment, prefix,
dataSourceName, result));
+ propsSetter -> propsSetter.propertiesSet(environment, PREFIX,
dataSourceName, result));
return result;
}
- private static Map<String, Object> mergedDataSourceProps(final Map<String,
Object> dataSourceProps, final Map<String, Object> dataSourceCommonProps) {
- if (!dataSourceCommonProps.isEmpty()) {
+ @SuppressWarnings("unchecked")
+ private static Map<String, Object> mergedDataSourceProps(final String
prefix, final Environment environment) {
+ final Map<String, Object> dataSourceProps =
PropertyUtil.handle(environment, prefix, Map.class);
+ boolean exist = PropertyUtil.containPropertyPrefix(environment,
COMMON_PREFIX);
+ if (exist) {
+ Map<String, Object> dataSourceCommonProps =
PropertyUtil.handle(environment, COMMON_PREFIX, Map.class);
dataSourceCommonProps.putAll(dataSourceProps);
return dataSourceCommonProps;
- } else {
- return dataSourceProps;
}
+ return dataSourceProps;
}
private static DataSource getJNDIDataSource(final String jndiName) throws
NamingException {
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-spring-infra/shardingsphere-jdbc-spring-boot-starter-infra/src/main/java/org/apache/shardingsphere/spring/boot/registry/AbstractAlgorithmProvidedBeanRegistry.java
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-spring-infra/shardingsphere-jdbc-spring-boot-starter-infra/src/main/java/org/apache/shardingsphere/spring/boot/registry/AbstractAlgorithmProvidedBeanRegistry.java
index 7f47006..089e37c 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-spring-infra/shardingsphere-jdbc-spring-boot-starter-infra/src/main/java/org/apache/shardingsphere/spring/boot/registry/AbstractAlgorithmProvidedBeanRegistry.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-spring-infra/shardingsphere-jdbc-spring-boot-starter-infra/src/main/java/org/apache/shardingsphere/spring/boot/registry/AbstractAlgorithmProvidedBeanRegistry.java
@@ -43,29 +43,40 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
public abstract class AbstractAlgorithmProvidedBeanRegistry<T extends
ShardingSphereAlgorithm> implements BeanDefinitionRegistryPostProcessor,
BeanPostProcessor {
+ private static final String TYPE_SUFFIX = ".type";
+
+ private static final String PROPS_SUFFIX = ".props";
+
+ private static final String PROPS = "props";
+
private final Environment environment;
@SuppressWarnings("all")
- protected void registerBean(final String preFix, final Class<T>
algorithmClass, final BeanDefinitionRegistry registry) {
- Map<String, Object> paramMap = PropertyUtil.handle(environment,
preFix, Map.class);
+ protected void registerBean(final String prefix, final Class<T>
algorithmClass, final BeanDefinitionRegistry registry) {
+ Map<String, Object> paramMap = PropertyUtil.handle(environment,
prefix, Map.class);
Set<String> keys = paramMap.keySet().stream().map(key -> {
return key.contains(".") ? key.substring(0, key.indexOf(".")) :
key;
}).collect(Collectors.toSet());
Map<String, YamlShardingSphereAlgorithmConfiguration>
shardingAlgorithmMap = new LinkedHashMap<>();
keys.forEach(each -> {
- String type = environment.getProperty(preFix + each + ".type");
- Map<String, Object> propsMap = PropertyUtil.handle(environment,
preFix + each + ".props", Map.class);
YamlShardingSphereAlgorithmConfiguration config = new
YamlShardingSphereAlgorithmConfiguration();
- config.setType(type);
- config.getProps().putAll(propsMap);
+ String propsPrefix = String.join("", prefix, each, PROPS_SUFFIX);
+ boolean exist = PropertyUtil.containPropertyPrefix(environment,
propsPrefix);
+ if (exist) {
+ Map<String, Object> propsMap =
PropertyUtil.handle(environment, propsPrefix, Map.class);
+ config.getProps().putAll(propsMap);
+ }
+ String typePrefix = String.join("", prefix, each, TYPE_SUFFIX);
+ String algorithmType = environment.getProperty(typePrefix);
+ config.setType(algorithmType);
shardingAlgorithmMap.put(each, config);
});
ShardingSphereServiceLoader.register(algorithmClass);
- shardingAlgorithmMap.forEach((k, v) -> {
- ShardingSphereAlgorithm algorithm =
TypedSPIRegistry.getRegisteredService(algorithmClass, v.getType(),
v.getProps());
+ shardingAlgorithmMap.forEach((key, algorithmConfiguration) -> {
+ ShardingSphereAlgorithm algorithm =
TypedSPIRegistry.getRegisteredService(algorithmClass,
algorithmConfiguration.getType(), algorithmConfiguration.getProps());
BeanDefinitionBuilder builder =
BeanDefinitionBuilder.genericBeanDefinition(algorithm.getClass());
- builder.addPropertyValue("props", v.getProps());
- registry.registerBeanDefinition(k, builder.getBeanDefinition());
+ builder.addPropertyValue(PROPS, algorithmConfiguration.getProps());
+ registry.registerBeanDefinition(key, builder.getBeanDefinition());
});
}