java - Spring @Inject 不工作

标签 java spring spring-data-jpa spring-data-elasticsearch

我最近将一个项目从 Spring 4.3.1 升级到 4.3.4,以前运行良好的项目现在对我来说不起作用了。

我使用 JPA,它包含一系列存储库类:

 /**
 * Spring Data JPA repository for the DrugQualityCategory entity.
 */

public interface DrugQualityCategoryRepository extends JpaRepository<DrugQualityCategory,Long> {

    @Query(value = "Select a from DrugQualityCategory a where a.oldId = ?1")
    DrugQualityCategory findOneByOldId(Integer oldId);

}

我们还使用 ElasticSearch 作为搜索引擎,它创建了一系列如下所示的 SearchRepositories:

  /**
 * Spring Data ElasticSearch repository for the Publication entity.
 */
public interface DrugQualityCategorySearchRepository extends ElasticsearchRepository<Publication, Long> {
}

ES 的问题之一是它需要定期更新其索引,因此为此我们构建了一个测试,它会注入(inject)所有存储库并从 JPA 存储库重建它们,当我们注入(inject)存储库时,如下所示:

 @RunWith(SpringJUnit4ClassRunner.class)
  @WebAppConfiguration
  @Transactional
  @ActiveProfiles("syncElasticsearch")
    public class SyncMysqlElasticSearch {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @Inject DrugQualityCategoryRepository drugQualityCategoryRepository;
    @Inject TechniqueRepository techniqueRepository;
    @Inject TradeDrugRepository tradeDrugRepository;
    @Inject SurveyDataRepository surveyDataRepository;
    @Inject RQAAQualityRepository rqaaQualityRepository;

然后我们填充 ES 实例:

drugQualityCategorySearchRepository.save(drugQualityCategoryRepository.findAll());
formulationSearchRepository.save(formulationRepository.findAll());
innDrugSearchRepository.save(innDrugRepository.findAll());
locationSearchRepository.save(locationRepository.findAll());
manufacturerSearchRepository.save(manufacturerRepository.findAll());

现在,我遇到的问题是,当我尝试开始测试时,我不断收到:

 org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name [class name] Unsatisfied dependency expressed
through field [field name] nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type [class name] available: expected at least
1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.inject.Inject()}

我在这里检查了几个问题,例如 this this ,快速浏览了 Spring 文档,但找不到任何相关内容

我显然已经在不同的地方尝试了所有@Autowired@Component@Repository标签,但没有得到积极的结果

最佳答案

您需要使用 @ContextConfiguration 注释来注释您的测试类,该注释指向相关的 @Configuration 类,该类扫描并注册您尝试注入(inject)的所有这些 bean。

请参阅 @WebAppConfiguration 的 java 文档:

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/context/web/WebAppConfiguration.html

Note that @WebAppConfiguration must be used in conjunction with @ContextConfiguration, either within a single test class or within a test class hierarchy.

关于java - Spring @Inject 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45503793/

相关文章:

java - Spring war 文件 "java.sql.SQLException: No suitable driver found for jdbc:postgresql:"

java - 如何仅从提供的小时数计算 Java 中的耗时

java - HelloWorld SpringMVC - HTTP 状态 404

spring - thymeleaf :each two iterate two listings

java - spring data jpa 存储库是否可以使用具有相同简单名称的多个实体?

java - 更改应用程序的背景

java - jBehave 写通用步骤

java - Spring Boot 无法从属性文件中读取值

java - 数据绑定(bind)后组合框不可编辑

java - Spring-Data-JPA - 将一条记录插入数据库后无限递归