在类路径资源...中定义的bean'hibernateSearchService'无法注册

时间:2019-05-04 00:09:30

标签: spring spring-boot

我正在按照本教程在应用程序中设置搜索

https://www.mkyong.com/spring-boot/spring-boot-hibernate-search-example/

我认为我的主要问题是针对以下课程

@EnableAutoConfiguration
@Configuration
public class HibernateSearchConfiguration {

    @Autowired
    private EntityManager bentityManager;

    @Bean
    HibernateSearchService hibernateSearchService() {
        HibernateSearchService hibernateSearchService = new HibernateSearchService(bentityManager);
        hibernateSearchService.initializeHibernateSearch();
        return hibernateSearchService;
    }

}

运行该应用程序时,我得到

***************************
APPLICATION FAILED TO START
***************************

Description:

The bean 'hibernateSearchService', defined in class path resource [myapp/configuration/HibernateSearchConfiguration.class], could not be registered. A bean with that name has already been defined in file [/home/arya/Documents/workspace-spring-tool-suite/MyApp/target/classes/myapp/service/HibernateSearchService.class] and overriding is disabled.

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

如果我删除

@Bean
HibernateSearchService hibernateSearchService() {
    HibernateSearchService hibernateSearchService = new HibernateSearchService(bentityManager);
    hibernateSearchService.initializeHibernateSearch();
    return hibernateSearchService;
}

从上面的类中启动应用程序。

下面是我的服务班

@Service
public class HibernateSearchService {

    @Autowired
    private final EntityManager centityManager;

    @Autowired
    public HibernateSearchService(EntityManager entityManager) {
        super();
        this.centityManager = entityManager;
    }

    public void initializeHibernateSearch() {

        try {
            FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(centityManager);
            fullTextEntityManager.createIndexer().startAndWait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @Transactional
    public List<Property> fuzzySearch(String searchTerm) {

        FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(centityManager);
        QueryBuilder qb = fullTextEntityManager.getSearchFactory().buildQueryBuilder().forEntity(Property.class).get();
        Query luceneQuery = qb.keyword().fuzzy().withEditDistanceUpTo(1).withPrefixLength(1).onFields("name")
                .matching(searchTerm).createQuery();

        javax.persistence.Query jpaQuery = fullTextEntityManager.createFullTextQuery(luceneQuery, Property.class);

        // execute search

        List<Property> BaseballCardList = null;
        try {
            BaseballCardList = jpaQuery.getResultList();
        } catch (NoResultException nre) {
            ;// do nothing

        }

        return BaseballCardList;

    }
}

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

您两次制作相同的豆子

在这里

@Bean
HibernateSearchService hibernateSearchService()

然后在这里

@Service
public class HibernateSearchService 

要么删除其中之一,要么将名称设置为@Bean(name="someNameOfYours")@Service("someOtherName")

相关问题