SpringBoot CRUD存储库无法自动装配

时间:2016-11-15 04:34:08

标签: java spring spring-boot spring-data-jpa

我正在使用SpringBoot和JPA。我收到了eg. holder.setText("Hello World");无法完成的错误。

这是我的主要课程:

@Autowired

我的班级失败了:

package com;

@SpringBootApplication
@EnableJpaRepositories(basePackages="com.repository")
public class InitBatch implements CommandLineRunner {

    @Autowired
    private Batch batch;

    @Autowired
    private CareDao careDAO;


    @Override
    public void run(String... args) throws Exception {
        careDAO.setMessageSource(messageSource());      
        batch.processFiles();   
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(InitBatch.class, args).close();
        System.out.println("Finish");
    }


    @Bean
    public ReloadableResourceBundleMessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();

        messageSource.setBasename("file:/config/instances");
        messageSource.setCacheSeconds(100);
        return messageSource;
    }   
}

这是package com.logger.impl; @Configuration @ComponentScan({"com.repository"}) @Component public class RequestLoggerImpl implements RequestLogger { @Autowired private RequestLogDao requestLogDao; } 类:

RequestLogDao

这是错误消息:

  

使用name' requestLoggerImpl'创建bean时出错:注册自动连接的依赖项失败;

     

无法自动装配字段:private com.repository.RequestLogDao com.logger.impl.RequestLoggerImpl.requestLogDao;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到类型为[com.repository.RequestLogDao]的限定bean用于依赖:预期至少有1个bean符合此依赖关系的autowire候选资格。依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}

我无法找出它为什么不能自动装配。我尝试在我的主课程中添加package com.repository; public interface RequestLogDao extends CrudRepository<RequestLog, Integer> { } ,但这不起作用。有什么建议?提前谢谢!

3 个答案:

答案 0 :(得分:1)

删除两者

@Configuration
@ComponentScan({"com.repository"}) 
来自RequestLoggerImpl的

从主类中删除@EnableJpaRepositories(basePackages="com.repository")。并将主类直接移到com

我认为,你添加了spring-boot-starter-data-jpa个依赖

答案 1 :(得分:1)

对于您的请求记录器,请先删除配置和组件扫描

package com.logger.impl;

@Component
public class RequestLoggerImpl implements RequestLogger {

    @Autowired
    private RequestLogDao requestLogDao;

}

由于你已经放置了一个@Configuration,我假设你需要一个配置类,所以你可以创建一个这样的:

@Configuration
@EnableJpaRepositories(basePackages = {"com.repository"}
public class MyConfiguration {
    // possibly your Bean declarations here
    // like dataSource, transactionManager etc.. related to your jpa repo
    // as needed
}

请注意您的基本套餐;因为它将用于:

package com.repository;

@Repository
public interface RequestLogDao extends CrudRepository<RequestLog, Integer> {
    // ...
}

最后在您的主课程中

@SpringBootApplication // scan base packages for autowiring as needed
public class InitBatch implements CommandLineRunner {
    // ...
}

最后检查您的依赖项。

答案 2 :(得分:-3)

你有一个实现RequestLogDao的具体类吗?我没有看到一个。

您需要拥有一个(Java类),并且需要在应用程序上下文中创建它的实例。