我创建了以下配置(我复制了@Lazy,因为我无法使其工作)
@Lazy(true)
@Configuration
public class ElasticConfiguration
{
private Logger logger = LoggerFactory.getLogger(ElasticConfiguration.class);
@Value("${elasticsearch.host}")
private String esHost;
@Value("${elasticsearch.port}")
private int esPort;
@Value("${elasticsearch.clustername}")
private String esClusterName;
@Lazy(true)
@Bean
public Client client() throws Exception
{
Builder builder = Settings.builder();
// builder.put("client.transport.sniff", true);
Settings settings = builder.put("cluster.name", esClusterName).build();
TransportClient client = new PreBuiltTransportClient(settings);
InetAddress adress = InetAddress.getByName(esHost);
client.addTransportAddress(new InetSocketTransportAddress(adress, esPort));
logger.debug(
"ES Client built with cluster.name;" + esClusterName + ";host;" + esHost + ";port;" + esPort + ";client.transport.sniff;"
+ builder.get("client.transport.sniff"));
return client;
}
@Lazy(true)
@Bean
public ElasticsearchOperations elasticsearchTemplate() throws Exception
{
return new ElasticsearchTemplate(client());
}
}
我无法进行延迟初始化,因为我的配置似乎被 spring-boot 自动配置覆盖了
Overriding bean definition for bean 'elasticsearchTemplate' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=true; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=elasticConfiguration; factoryMethodName=elasticsearchTemplate; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [xxx/xxx/ElasticConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration; factoryMethodName=elasticsearchTemplate; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/data/elasticsearch/ElasticsearchDataAutoConfiguration.class]]
我还尝试在类上添加以下注释
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
与以下属性相关,但效果不佳
org.springframework.boot.autoconfigure.EnableAutoConfiguration=xxx.xxx.ElasticConfiguration
我应该做什么?
最佳答案
好吧,我发现的唯一解决方案是使用以下属性
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
请注意,使用以下注释对我不起作用......
@EnableAutoConfiguration(exclude={ElasticsearchDataAutoConfiguration.class})
编辑
事实上,我的问题是我的方法 elasticsearchTemplate()
返回 ElasticsearchOperations
而不是 ElasticsearchTemplate
。
更改签名时,@Lazy 注释似乎有效。
关于java - Spring引导自动配置覆盖自定义(elasticsearchTemplate)配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49115146/