使用 Spring 自动装配嵌入式 Elastic
Autowiring Embedded Elastic with Spring
我正在尝试使用 Spring 和 Embedded Elastic 构建休息 api。我在尝试启动我的应用程序时收到 NoSuchBeanDefinitionException。
目前,我有这个用于连接弹性数据库:
@Configuration
public class EsConfig {
Node node;
@Bean
public Client es() {
node = nodeBuilder().local(true).node();
return node.client();
}
(Destructor)
}
在控制器中:
@RestController
public class Controller {
@Autowired
public Client elasticSearchClient;
...
}
但是当我启动它时,我得到这个异常:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'controller': Injection of autowired dependencies failed;
nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: public org.elasticsearch.client.Client package.Controller.elasticSearchClient;
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type [org.elasticsearch.client.Client] found for dependency:
expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
我已经尝试了一些不同的注释,但我显然离题太远了。
No qualifying bean of type [some.Thing]
表示spring不知道class适用于这个接口。
原因可能是
- 具有
@Bean
方法的class不是@Configuration
class
@Configuration
class 未被 class 路径组件扫描器拾取。
Spring 默认情况下启动只会扫描 @SpringBootApplication
的子包层次结构。如果你想包含代码之外的代码,你可以通过 @ComponentScan
注释更改扫描行为。
@SpringBootApplication
@ComponentScan(basePackageClasses = {MyApp.class, SomeOtherClassInARootPackage.class})
public class MyApp {
...
将添加其他一些 class 的程序包(和子程序包),同时保持扫描应用程序的程序包。
我正在尝试使用 Spring 和 Embedded Elastic 构建休息 api。我在尝试启动我的应用程序时收到 NoSuchBeanDefinitionException。
目前,我有这个用于连接弹性数据库:
@Configuration
public class EsConfig {
Node node;
@Bean
public Client es() {
node = nodeBuilder().local(true).node();
return node.client();
}
(Destructor)
}
在控制器中:
@RestController
public class Controller {
@Autowired
public Client elasticSearchClient;
...
}
但是当我启动它时,我得到这个异常:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'controller': Injection of autowired dependencies failed;
nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: public org.elasticsearch.client.Client package.Controller.elasticSearchClient;
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type [org.elasticsearch.client.Client] found for dependency:
expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
我已经尝试了一些不同的注释,但我显然离题太远了。
No qualifying bean of type [some.Thing]
表示spring不知道class适用于这个接口。
原因可能是
- 具有
@Bean
方法的class不是@Configuration
class @Configuration
class 未被 class 路径组件扫描器拾取。
Spring 默认情况下启动只会扫描 @SpringBootApplication
的子包层次结构。如果你想包含代码之外的代码,你可以通过 @ComponentScan
注释更改扫描行为。
@SpringBootApplication
@ComponentScan(basePackageClasses = {MyApp.class, SomeOtherClassInARootPackage.class})
public class MyApp {
...
将添加其他一些 class 的程序包(和子程序包),同时保持扫描应用程序的程序包。