diff --git a/easy-es-annotation/pom.xml b/easy-es-annotation/pom.xml index 91778fd8..0c6ae279 100644 --- a/easy-es-annotation/pom.xml +++ b/easy-es-annotation/pom.xml @@ -7,7 +7,7 @@ org.dromara.easy-es easy-es-parent - 2.1.0 + 3.0.0 ../easy-es-parent diff --git a/easy-es-boot-starter/pom.xml b/easy-es-boot-starter/pom.xml index 2f2b1aaf..408bace7 100644 --- a/easy-es-boot-starter/pom.xml +++ b/easy-es-boot-starter/pom.xml @@ -5,7 +5,7 @@ org.dromara.easy-es easy-es-parent - 2.1.0 + 3.0.0 ../easy-es-parent 4.0.0 diff --git a/easy-es-boot-starter/src/main/java/org/dromara/easyes/starter/EsAutoConfiguration.java b/easy-es-boot-starter/src/main/java/org/dromara/easyes/starter/EsAutoConfiguration.java index 4e11583e..3adcd1d9 100644 --- a/easy-es-boot-starter/src/main/java/org/dromara/easyes/starter/EsAutoConfiguration.java +++ b/easy-es-boot-starter/src/main/java/org/dromara/easyes/starter/EsAutoConfiguration.java @@ -4,13 +4,16 @@ import co.elastic.clients.elasticsearch.ElasticsearchClient; import org.dromara.easyes.common.property.EasyEsDynamicProperties; import org.dromara.easyes.common.property.EasyEsProperties; import org.dromara.easyes.common.utils.EsClientUtils; +import org.dromara.easyes.spring.config.EasyEsConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigureOrder; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; +import org.springframework.core.Ordered; /** * es自动配置 @@ -19,21 +22,10 @@ import org.springframework.context.annotation.Configuration; **/ @Configuration @ConditionalOnClass(ElasticsearchClient.class) -@ConditionalOnExpression("'${easy-es.address:x}'!='x'") -@ConditionalOnProperty(prefix = "easy-es", name = {"enable"}, havingValue = "true", matchIfMissing = true) +@ConditionalOnProperty(prefix = "easy-es", name = "enable", havingValue = "true", matchIfMissing = true) +@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) // 确保配置类优先加载 public class EsAutoConfiguration { - /** - * 装配ElasticsearchClient - * - * @return ElasticsearchClient bean - */ - @Bean - @ConditionalOnMissingBean - public ElasticsearchClient elasticClient() { - return EsClientUtils.buildClient(easyEsProperties()); - } - @Bean @ConfigurationProperties(prefix = "easy-es") public EasyEsProperties easyEsProperties() { @@ -46,4 +38,16 @@ public class EsAutoConfiguration { return new EasyEsDynamicProperties(); } + @Bean + @ConditionalOnMissingBean + @DependsOn({"easyEsProperties", "easyEsDynamicProperties"}) // 显式依赖 + public ElasticsearchClient elasticClient() { + return EsClientUtils.buildClient(easyEsProperties()); + } + + @Bean + public EasyEsConfiguration esConfiguration() { + return new EasyEsConfiguration(); + } + } diff --git a/easy-es-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/easy-es-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 1d418f5b..4b09f64f 100644 --- a/easy-es-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/easy-es-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -163,7 +163,7 @@ "type": "java.lang.Boolean" }, { - "name": "easy-es.dynamic", + "name": "easy-es.dynamic.datasource", "description": "Whether to intelligently add the. keyword suffix to the field. This configuration is enabled by default. The field type is KEYWORD only for annotation configuration_ The String field of TEXT or unconfigured type takes effect and only takes effect when the query requires that the field be of keyword type, so it is called smart! 是否智能为字段添加.keyword后缀 默认开启 此配置仅对注解配置字段类型为KEYWORD_TEXT或未配置类型的String字段生效,并且只会在查询要求该字段必须为keyword类型的查询中才生效,因此谓之智能!.", "type": "java.util.Map" } diff --git a/easy-es-boot-starter/src/main/resources/META-INF/spring.factories b/easy-es-boot-starter/src/main/resources/META-INF/spring.factories index 8bc1cb07..ebaa6461 100644 --- a/easy-es-boot-starter/src/main/resources/META-INF/spring.factories +++ b/easy-es-boot-starter/src/main/resources/META-INF/spring.factories @@ -1,5 +1,4 @@ # Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.dromara.easyes.starter.EsAutoConfiguration,\ - org.dromara.easyes.spring.config.EasyEsConfiguration,\ org.dromara.easyes.starter.config.GeneratorConfiguration diff --git a/easy-es-common/pom.xml b/easy-es-common/pom.xml index f51e6d11..6f3b7f72 100644 --- a/easy-es-common/pom.xml +++ b/easy-es-common/pom.xml @@ -6,7 +6,7 @@ org.dromara.easy-es easy-es-parent - 2.1.0 + 3.0.0 ../easy-es-parent diff --git a/easy-es-core/pom.xml b/easy-es-core/pom.xml index f44eb3bb..e5a78e34 100644 --- a/easy-es-core/pom.xml +++ b/easy-es-core/pom.xml @@ -7,7 +7,7 @@ org.dromara.easy-es easy-es-parent - 2.1.0 + 3.0.0 ../easy-es-parent diff --git a/easy-es-extension/pom.xml b/easy-es-extension/pom.xml index c11af5ab..b5efa7b0 100644 --- a/easy-es-extension/pom.xml +++ b/easy-es-extension/pom.xml @@ -7,7 +7,7 @@ org.dromara.easy-es easy-es-parent - 2.1.0 + 3.0.0 ../easy-es-parent diff --git a/easy-es-parent/pom.xml b/easy-es-parent/pom.xml index e2391cf8..66a0064d 100644 --- a/easy-es-parent/pom.xml +++ b/easy-es-parent/pom.xml @@ -6,7 +6,7 @@ org.dromara.easy-es easy-es-parent - 2.1.0 + 3.0.0 easy-es-parent easy use for elastic search diff --git a/easy-es-solon-plugin/pom.xml b/easy-es-solon-plugin/pom.xml index bd3e85ff..2a3242cc 100644 --- a/easy-es-solon-plugin/pom.xml +++ b/easy-es-solon-plugin/pom.xml @@ -3,7 +3,7 @@ org.dromara.easy-es easy-es-parent - 2.1.0 + 3.0.0 ../easy-es-parent 4.0.0 diff --git a/easy-es-solon-plugin/src/main/java/org/dromara/easyes/solon/config/EsAutoConfiguration.java b/easy-es-solon-plugin/src/main/java/org/dromara/easyes/solon/config/EsAutoConfiguration.java index 73e02c4a..846a6f0e 100644 --- a/easy-es-solon-plugin/src/main/java/org/dromara/easyes/solon/config/EsAutoConfiguration.java +++ b/easy-es-solon-plugin/src/main/java/org/dromara/easyes/solon/config/EsAutoConfiguration.java @@ -21,7 +21,7 @@ import java.util.Map; * Copyright © 2021 xpc1024 All Rights Reserved **/ @Configuration -@Condition(onClass = ElasticsearchClient.class, onProperty = "${easy-es.enable:true} = true && ${easy-es.address:x} != x") +@Condition(onClass = ElasticsearchClient.class, onProperty = "${easy-es.enable:true} = true") public class EsAutoConfiguration { @Bean diff --git a/easy-es-solon-plugin/src/main/java/org/dromara/easyes/solon/register/MapperScannerRegister.java b/easy-es-solon-plugin/src/main/java/org/dromara/easyes/solon/register/MapperScannerRegister.java index 2b70aecc..ea55b48a 100644 --- a/easy-es-solon-plugin/src/main/java/org/dromara/easyes/solon/register/MapperScannerRegister.java +++ b/easy-es-solon-plugin/src/main/java/org/dromara/easyes/solon/register/MapperScannerRegister.java @@ -118,6 +118,12 @@ public class MapperScannerRegister implements BeanBuilder { } // 查找es mapper for (String doScan : anno.value()) { + // 判断是否需要处理${}变量 + if (doScan.contains("${") && doScan.contains("}")) { + String basePackage = Solon.cfg().getByTmpl(doScan); + LogUtils.formatInfo("Scan Easy-Es Mapper[%s -> %s]", doScan, basePackage); + doScan = basePackage; + } Collection> classPath = ClassUtil.scanClasses(doScan); for (Class clazz : classPath) { // 跳过非ee的mapper,比如瞎几把写的接口,没有继承BaseEsMapper,继承了的推入容器 diff --git a/easy-es-solon-test/pom.xml b/easy-es-solon-test/pom.xml index 7aa616e2..6e0e797b 100644 --- a/easy-es-solon-test/pom.xml +++ b/easy-es-solon-test/pom.xml @@ -4,7 +4,7 @@ org.dromara.easy-es easy-es - 2.1.0 + 3.0.0 easy-es-solon-test diff --git a/easy-es-spring-test/pom.xml b/easy-es-spring-test/pom.xml index aa35dde5..ae429b70 100644 --- a/easy-es-spring-test/pom.xml +++ b/easy-es-spring-test/pom.xml @@ -6,7 +6,7 @@ org.dromara.easy-es easy-es - 2.1.0 + 3.0.0 easy-es-spring-test diff --git a/easy-es-spring/pom.xml b/easy-es-spring/pom.xml index 86c040e3..4a50bde8 100644 --- a/easy-es-spring/pom.xml +++ b/easy-es-spring/pom.xml @@ -6,7 +6,7 @@ org.dromara.easy-es easy-es-parent - 2.1.0 + 3.0.0 ../easy-es-parent diff --git a/easy-es-spring/src/main/java/org/dromara/easyes/spring/MapperScannerConfigurer.java b/easy-es-spring/src/main/java/org/dromara/easyes/spring/MapperScannerConfigurer.java index 52da97f9..3572632e 100644 --- a/easy-es-spring/src/main/java/org/dromara/easyes/spring/MapperScannerConfigurer.java +++ b/easy-es-spring/src/main/java/org/dromara/easyes/spring/MapperScannerConfigurer.java @@ -67,12 +67,13 @@ public class MapperScannerConfigurer // 取变量 this.basePackage = Optional.ofNullable(this.basePackage) - .map(getEnvironment()::resolvePlaceholders).orElse(null); + .map(getEnvironment()::resolvePlaceholders).orElse(EMPTY_STR); // 做扫包的操作了、与注解扫包类似,只不过这里是spring配置方式 // 在mybatis中配置了很多扫描拦截属性,这里放到后面拓展 ClassPathMapperScanner scanner = new ClassPathMapperScanner(beanDefinitionRegistry, getEnvironment()); scanner.registerFilters(); - scanner.doScan(this.basePackage); + String[] packages = this.basePackage.split(COMMA); + scanner.doScan(packages); } private String getPropertyValue(String propertyName, PropertyValues values) { diff --git a/easy-es-spring/src/main/java/org/dromara/easyes/spring/annotation/MapperScannerRegister.java b/easy-es-spring/src/main/java/org/dromara/easyes/spring/annotation/MapperScannerRegister.java index ed1073a3..59c651f6 100644 --- a/easy-es-spring/src/main/java/org/dromara/easyes/spring/annotation/MapperScannerRegister.java +++ b/easy-es-spring/src/main/java/org/dromara/easyes/spring/annotation/MapperScannerRegister.java @@ -1,11 +1,14 @@ package org.dromara.easyes.spring.annotation; +import org.dromara.easyes.common.utils.LogUtils; import org.dromara.easyes.spring.MapperScannerConfigurer; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.core.annotation.AnnotationAttributes; +import org.springframework.core.env.Environment; import org.springframework.core.type.AnnotationMetadata; import org.springframework.util.StringUtils; @@ -13,12 +16,20 @@ import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; +import static org.dromara.easyes.common.constants.BaseEsConstants.COMMA; + /** * 注册bean *

* Copyright © 2021 xpc1024 All Rights Reserved **/ -public class MapperScannerRegister implements ImportBeanDefinitionRegistrar { +public class MapperScannerRegister implements ImportBeanDefinitionRegistrar, EnvironmentAware { + private Environment environment; + + @Override + public void setEnvironment(Environment environment) { + this.environment = environment; + } @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { @@ -27,9 +38,19 @@ public class MapperScannerRegister implements ImportBeanDefinitionRegistrar { // 默认已注解标记为主,如果没有则尝试寻找easy-es配置 scan if (mapperScanAttrs != null) { List basePackages = Arrays.stream(mapperScanAttrs.getStringArray("value")) - .filter(StringUtils::hasText).collect(Collectors.toList()); + .filter(StringUtils::hasText) + .map(map -> { + // 判断是否需要处理${}变量 + if (map.contains("${") && map.contains("}")) { + String basePackage = this.environment.resolvePlaceholders(map); + LogUtils.formatInfo("Scan Easy-Es Mapper[%s -> %s]", map, basePackage); + return basePackage; + } + return map; + }) + .collect(Collectors.toList()); // 注册bean - registerBeanDefinitions(registry, generateBaseBeanName(importingClassMetadata, 0), + registerBeanDefinitions(registry, generateBaseBeanName(importingClassMetadata), StringUtils.toStringArray(basePackages)); } } @@ -38,19 +59,20 @@ public class MapperScannerRegister implements ImportBeanDefinitionRegistrar { * 通过BeanDefinition注册bean,在bean注册前处理interface中bean参数问题,interface与普通bean不同, * 使用了jdk动态代理,需要确定注册的实际interface class,就需要通过BeanDefinition来追加属性, * 当前使用到了spring的构造 - * @param registry spring bean扫码注册器 + * + * @param registry spring bean扫码注册器 * @param basePackages 扫码的包 */ void registerBeanDefinitions(BeanDefinitionRegistry registry, String beanName, String... basePackages) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MapperScannerConfigurer.class); - builder.addPropertyValue("basePackage", String.join(",", basePackages)); + builder.addPropertyValue("basePackage", String.join(COMMA, basePackages)); // for spring-native builder.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); registry.registerBeanDefinition(beanName, builder.getBeanDefinition()); } - private static String generateBaseBeanName(AnnotationMetadata importingClassMetadata, int index) { - return importingClassMetadata.getClassName() + "#" + MapperScannerRegister.class.getSimpleName() + "#" + index; + private static String generateBaseBeanName(AnnotationMetadata importingClassMetadata) { + return importingClassMetadata.getClassName() + "#" + MapperScannerRegister.class.getSimpleName() + "#" + 0; } } diff --git a/easy-es-spring/src/main/java/org/dromara/easyes/spring/config/EasyEsConfiguration.java b/easy-es-spring/src/main/java/org/dromara/easyes/spring/config/EasyEsConfiguration.java index e4ec3633..7a50d9d3 100644 --- a/easy-es-spring/src/main/java/org/dromara/easyes/spring/config/EasyEsConfiguration.java +++ b/easy-es-spring/src/main/java/org/dromara/easyes/spring/config/EasyEsConfiguration.java @@ -1,5 +1,6 @@ package org.dromara.easyes.spring.config; +import lombok.NonNull; import lombok.Setter; import org.dromara.easyes.common.property.EasyEsDynamicProperties; import org.dromara.easyes.common.property.EasyEsProperties; @@ -10,8 +11,10 @@ import org.dromara.easyes.core.index.AutoProcessIndexSmoothlyStrategy; import org.dromara.easyes.spring.factory.IndexStrategyFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; import org.springframework.util.Assert; import java.util.Map; @@ -22,23 +25,28 @@ import java.util.Map; */ @Setter @Configuration -public class EasyEsConfiguration implements InitializingBean { +public class EasyEsConfiguration implements InitializingBean, EnvironmentAware { + private Environment environment; + @Autowired(required = false) private EasyEsProperties easyEsProperties; + @Autowired(required = false) private EasyEsDynamicProperties easyEsDynamicProperties; - @Autowired - public EasyEsConfiguration(EasyEsProperties easyEsProperties, EasyEsDynamicProperties easyEsDynamicProperties) { - this.easyEsProperties = easyEsProperties; - this.easyEsDynamicProperties = easyEsDynamicProperties; + @Override + public void setEnvironment(@NonNull Environment environment) { + this.environment = environment; } - @Override - public void afterPropertiesSet() throws Exception { - Assert.notNull(this.easyEsProperties, "easyEsProperties must is A bean. easy-es配置类必须给配置一个bean"); + public void afterPropertiesSet() { + Boolean enable = environment.getProperty("easy-es.enable", Boolean.class, Boolean.TRUE); + if (enable) { + Assert.notNull(this.easyEsProperties, "easyEsProperties must is A bean. easy-es配置类必须给配置一个bean"); + } } + @Bean public IndexStrategyFactory indexStrategyFactory() { return new IndexStrategyFactory(); diff --git a/easy-es-springboot-sample/pom.xml b/easy-es-springboot-sample/pom.xml index d76dc42f..36a44332 100644 --- a/easy-es-springboot-sample/pom.xml +++ b/easy-es-springboot-sample/pom.xml @@ -9,7 +9,7 @@ org.dromara.easy-es easy-es - 2.1.0 + 3.0.0 diff --git a/easy-es-springboot-test/pom.xml b/easy-es-springboot-test/pom.xml index e078968c..fd014845 100644 --- a/easy-es-springboot-test/pom.xml +++ b/easy-es-springboot-test/pom.xml @@ -7,7 +7,7 @@ org.dromara.easy-es easy-es - 2.1.0 + 3.0.0 easy-es-springboot-test diff --git a/easy-es-springboot-test/src/test/java/org/dromara/easyes/test/interceptor/TenantLineInnerInterceptor.java b/easy-es-springboot-test/src/test/java/org/dromara/easyes/test/interceptor/TenantLineInnerInterceptor.java index 9618eb95..3999c68c 100644 --- a/easy-es-springboot-test/src/test/java/org/dromara/easyes/test/interceptor/TenantLineInnerInterceptor.java +++ b/easy-es-springboot-test/src/test/java/org/dromara/easyes/test/interceptor/TenantLineInnerInterceptor.java @@ -52,7 +52,7 @@ public class TenantLineInnerInterceptor implements Interceptor { // wrapper.eq("tenantId", "1"); // return invocation.proceed(); // } - System.out.println("增则拦截方法"); + System.out.println("easy-es intercept..."); return invocation.proceed(); } } diff --git a/pom.xml b/pom.xml index 6194b2fd..be95b5d9 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.dromara.easy-es easy-es - 2.1.0 + 3.0.0 easy-es easy use for elastic search