2017-08-04 85 views
1

我最近将一个项目从Spring 4.3.1升级到了4.3.4,以前用什么工作都很好,现在只是不适合我。Spring @Inject不工作

我使用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的问题在于它需要定期更新它的索引,所以为此我们构建了一个测试,它将注入所有存储库并从JPA存储库重建它们,当我们注入回购时,看起来像这样:

@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()} 

我已检查了几个问题,如 thisthis,浏览了Spring文档,但找不到任何相关内容

我明明尝试了所有在不同的地方@Autowired@Component@Repository标签,没有阳性结果

+0

您如何设置测试环境? – Jan

+0

嗨,1月,我不知道我知道你在上下文中的含义,我有一个配置yml文件,它为ES和JPA设置连接参数,除此之外,我只有代码提取中的注释在原来的问题 – Steven

回答

1

你需要用@ContextConfiguration注解指向它扫描和寄存器相关@Configuration类来注释测试类所有这些你想要注入的豆子。

参见@WebAppConfiguration java的文档:

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

注意@WebAppConfiguration必须与@ContextConfiguration一起使用,无论是在一个单一的测试类或测试类层次结构中。

+0

嗨,谢谢你的回复,我一直在尝试这个在最后一个小时,仍然无法使其工作。我试着只是添加上下文的注解,它不会把我的主类作为参数,它说它不存在,它不会把类路径*:作为参数。 我已经尝试将配置标记添加到主类,没有运气,也使得大多数组合与存储库标签等...我错过了什么? – Steven

+1

@Steven你使用xml或Java conig或者spring启动? – Plog

+0

使用Spring启动的Java配置,我想我可能会做些什么,我只是用ContextConfiguration注解(classes = DrugQualityDataManagerApp.class),现在它给了我我认为是无关的错误 – Steven