java - No qualifying bean of type ... not defined 我的存储库类之一的错误消息

标签 java spring

我在运行时遇到以下异常

Exception in thread "AWT-EventQueue-0" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.mbc.receiptprinter.repository.AddressRepository] is defined

我的 AddressRepository 接口(interface)是这样定义的:

package com.mbc.receiptprinter.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.mbc.receiptprinter.model.Address;

public interface AddressRepository extends JpaRepository<Address, Long> {

}

这是我的 AppConfig:

package com.mbc.receiptprinter.config;

import org.hibernate.ejb.HibernatePersistence;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.annotation.Resource;
import javax.sql.DataSource;
import java.util.Properties;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories
@PropertySource("classpath:Application.properties")
public class AppConfig {

    private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver";
    private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password";
    private static final String PROPERTY_NAME_DATABASE_URL = "db.url";
    private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username";

    private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect";
    private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql";
    private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan";

    @Resource
    private Environment env;

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();

        dataSource.setDriverClassName(env.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));
        dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));
        dataSource.setUsername(env.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));
        dataSource.setPassword(env.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));

        return dataSource;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
        entityManagerFactoryBean.setDataSource(dataSource());
        entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistence.class);
        entityManagerFactoryBean.setPackagesToScan(env.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN));
        entityManagerFactoryBean.setJpaProperties(hibProperties());
        return entityManagerFactoryBean;
    }

    private Properties hibProperties() {
        Properties properties = new Properties();
        properties.put(PROPERTY_NAME_HIBERNATE_DIALECT, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT));
        properties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));
        return properties;
    }

    @Bean
    public JpaTransactionManager transactionManager() {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
        return transactionManager;
    }
}

和Application.properties:

#DB properties:
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/mbc
db.username=someuser
db.password=somepass

#Hibernate Configuration:
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.show_sql=true
entitymanager.packages.to.scan=com.mbc.receiptprinter

有什么想法让我无法识别这个存储库吗?我使用 IntelliJ 作为我的 IDE。

最佳答案

默认情况下,EnableJpaRepositories 会扫描注释类的包以查找数据存储库。相反,使用它的 basePackages属性以指定 com.mbc.receiptprinter.repository

关于java - No qualifying bean of type ... not defined 我的存储库类之一的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19285887/

相关文章:

java - 通用 map 打印功能

java - Spring 上下文 XML 中的属性未解析

java - Spring MVC映射问题

java - 如何在XML中配置属性?

java - 自定义 Spring AOP 注解不适用于默认方法

java - 使 JButton 中的文本不可见

java - 验证方法体中是否使用了方法参数

java 使用 file[] 获取多个目录的文件夹大小

java - 为什么 Hibernate 中的生命周期监听器是可序列化的?

java - Reactor/WebFlux 实现了一个响应式的 http 新闻自动收报机