Spring Boot:如何注入存储库

约瑟夫·加格农

我有一个使用Spring Data和JPA的Spring Boot应用程序。因此,我为数据实体编写了存储库类(实际上是接口),并且必须@Service提供一种处理数据的方法。

我遇到了一个问题,无法弄清楚如何将存储库注入服务类。在其他情况下,我将编写一个@Configuration带有@Bean定义以提供需要注入的项目。

这在这里不起作用,因为我没有注入类实例化,而是需要某种Repository接口实现

我在Vaadin Spring Boot应用程序中使用了此技术,该应用程序具有内置的支持,可以识别,创建/生成和注入所需的内容。对于基本操作,无需创建任何实现类。

它工作得很好,但是我在这里没有。我不想为了获得存储库注入良好性而将应用程序变成Vaadin应用程序。我怎样才能做到这一点?

更新

我已经尝试过建议的方法,但仍然没有骰子。我必须缺少一些基本的东西。

以下是一些摘要:

AppConfig.java:

@Configuration
public class AppConfig {
  @Bean
  public TaskMasterService tmService(final TaskMasterRepository repo) {
    return new TaskMasterService(repo);
  }
  // Other @Bean definitions    
}

DataIngester.java :(“主”)

@SpringBootApplication
public class DataIngester {
  public static void main(String[] args) {
    SpringApplication.run(DataIngester.class, args);
  }
}

IngesterRunner.java:

@Component
public class IngesterRunner implements CommandLineRunner {
  private TaskMasterService       tmService;
  private TaskRelationshipService trService;
  private VariantDetailService    vdService;

  @Autowired
  public IngesterRunner(TaskMasterService tmService, TaskRelationshipService trService,
      VariantDetailService vdService) {
    this.tmService = tmService;
    this.trService = trService;
    this.vdService = vdService;
  }

  @Override
  public void run(String... args) throws Exception {
    ...
  }

}

TaskMasterService.java:

@Service
@Transactional
public class TaskMasterService {
  private final TaskMasterRepository repo;

  @Autowired
  public TaskMasterService(TaskMasterRepository repo) {
    this.repo = repo;
  }
  ...
}

TaskMasterRepository.java:

@Repository
public interface TaskMasterRepository extends JpaRepository<TaskMaster, Long> {
}

控制台输出:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.3.RELEASE)

2020-12-23 07:31:12.972  INFO workstation --- [  restartedMain] c.f.e.i.DataIngester                     : Starting DataIngester on workstation with PID 23800 (C:\Users\jgagnon\workspace\java\e1-task-info2\target\classes started by jgagnon in C:\Users\jgagnon\workspace\java\e1-task-info2)
2020-12-23 07:31:12.975  INFO workstation --- [  restartedMain] c.f.e.i.DataIngester                     : No active profile set, falling back to default profiles: default
2020-12-23 07:31:13.007  INFO workstation --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2020-12-23 07:31:13.364  INFO workstation --- [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFERRED mode.
2020-12-23 07:31:13.382  INFO workstation --- [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 11ms. Found 0 JPA repository interfaces.
2020-12-23 07:31:13.636  INFO workstation --- [  restartedMain] o.s.s.c.ThreadPoolTaskExecutor           : Initializing ExecutorService 'applicationTaskExecutor'
2020-12-23 07:31:13.661  WARN workstation --- [  restartedMain] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ingesterRunner' defined in file [C:\Users\jgagnon\workspace\java\e1-task-info2\target\classes\com\mycompany\app\ingest\IngesterRunner.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.mycompany.app.backend.service.TaskMasterService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
2020-12-23 07:31:13.661  INFO workstation --- [  restartedMain] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2020-12-23 07:31:13.668  INFO workstation --- [         task-1] o.h.j.i.u.LogHelper                      : HHH000204: Processing PersistenceUnitInfo [name: default]
2020-12-23 07:31:13.713  INFO workstation --- [         task-1] o.h.Version                              : HHH000412: Hibernate ORM core version 5.4.20.Final
2020-12-23 07:31:13.838  INFO workstation --- [         task-1] o.h.a.c.Version                          : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2020-12-23 07:31:13.937  INFO workstation --- [         task-1] c.z.h.HikariDataSource                   : HikariPool-1 - Starting...
2020-12-23 07:31:14.112  INFO workstation --- [         task-1] c.z.h.HikariDataSource                   : HikariPool-1 - Start completed.
2020-12-23 07:31:14.128  INFO workstation --- [         task-1] o.h.d.Dialect                            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2020-12-23 07:31:14.342  INFO workstation --- [         task-1] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2020-12-23 07:31:14.348  INFO workstation --- [         task-1] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
Exception in thread "task-2" 2020-12-23 07:31:14.352  INFO workstation --- [  restartedMain] o.s.s.c.ThreadPoolTaskExecutor           : Shutting down ExecutorService 'applicationTaskExecutor'
2020-12-23 07:31:14.353  INFO workstation --- [  restartedMain] c.z.h.HikariDataSource                   : HikariPool-1 - Shutdown initiated...
org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'springApplicationAdminRegistrar': Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:212)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207)
    at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:245)
    at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:197)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:134)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:404)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:361)
    at org.springframework.boot.autoconfigure.orm.jpa.DataSourceInitializedPublisher.publishEventIfRequired(DataSourceInitializedPublisher.java:99)
    at org.springframework.boot.autoconfigure.orm.jpa.DataSourceInitializedPublisher.access$100(DataSourceInitializedPublisher.java:50)
    at org.springframework.boot.autoconfigure.orm.jpa.DataSourceInitializedPublisher$DataSourceSchemaCreatedPublisher.lambda$postProcessEntityManagerFactory$0(DataSourceInitializedPublisher.java:200)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
    at java.base/java.lang.Thread.run(Thread.java:832)
2020-12-23 07:31:14.379  INFO workstation --- [  restartedMain] c.z.h.HikariDataSource                   : HikariPool-1 - Shutdown completed.
2020-12-23 07:31:14.384  INFO workstation --- [  restartedMain] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-12-23 07:31:14.503 ERROR workstation --- [  restartedMain] o.s.b.d.LoggingFailureAnalysisReporter   : 

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

Description:

Parameter 0 of constructor in com.mycompany.app.ingest.IngesterRunner required a bean of type 'com.mycompany.app.backend.service.TaskMasterService' that could not be found.


Action:

Consider defining a bean of type 'com.mycompany.app.backend.service.TaskMasterService' in your configuration.
针织

像对待其他任何依赖项(也称为spring bean)一样,自动装配您的存储库:

@Repository
public interface YourRepository extends CrudRepository<YourEntity, String> {
  // …
}

@Service
public class YourService {
  private final YourRepository repo;

  @Autowired
  public YourService(final YourRepository repo) {
    this.repo = repo;
  }

  public Object method() {
    // use your dependency:
    this.repo.findById(…);
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring Data:注入的存储库为空

来自分类Dev

将Spring存储库注入Spring @Configuration类

来自分类Dev

如何将Spring Data JPA存储库注入Servlet过滤器?

来自分类Dev

如何在自定义 Spring Data JPA 存储库中注入配置

来自分类Dev

Spring Boot:如何将依赖项注入到库调用的类中?

来自分类Dev

在Spring Boot中监听存储库事件

来自分类Dev

Spring Boot设置MongoDB存储库

来自分类Dev

Spring Boot存储库POST响应

来自分类Dev

Spring Boot JPA存储库错误

来自分类Dev

Spring数据存储库-没有合格的bean注入

来自分类Dev

使用Spring-Data-Solr注入存储库

来自分类Dev

测试 Spring JPA 存储库(非 Spring Boot)

来自分类Dev

如何使用Spring Boot从不同的软件包自动连接存储库接口?

来自分类Dev

如何在带有粗存储库的Spring Boot中使用findAll方法

来自分类Dev

Spring Boot:如何避免每个域类的 JPA 存储库过多

来自分类Dev

Spring Boot 和 JPA 存储库——如何通过 ID 过滤 GET

来自分类常见问题

如何设置Spring Data JPA存储库?

来自分类Dev

如何设置Spring Data JPA存储库?

来自分类Dev

Spring MVC + Spring Data,在服务上注入存储库时出错

来自分类Dev

使用自动连接的存储库测试Spring Boot MVC

来自分类Dev

Spring Boot自动装配存储库始终为空

来自分类Dev

Spring Boot检测到2个相同的存储库bean

来自分类Dev

Spring Boot mongoDB 自动装配空存储库

来自分类Dev

Spring Boot JPA Hibernate CRUD 存储库中的查找表

来自分类Dev

在存储库中返回空点异常 - Spring Boot

来自分类Dev

使用 Jpa 存储库测试的 Spring Boot 服务

来自分类Dev

JPQL - Spring Boot 存储库查询 - 地图属性

来自分类Dev

在 spring boot jpa 存储库中保留嵌入(相关)项目?

来自分类Dev

Spring-Boot如何正确注入javax.validation.Validator

Related 相关文章

  1. 1

    Spring Data:注入的存储库为空

  2. 2

    将Spring存储库注入Spring @Configuration类

  3. 3

    如何将Spring Data JPA存储库注入Servlet过滤器?

  4. 4

    如何在自定义 Spring Data JPA 存储库中注入配置

  5. 5

    Spring Boot:如何将依赖项注入到库调用的类中?

  6. 6

    在Spring Boot中监听存储库事件

  7. 7

    Spring Boot设置MongoDB存储库

  8. 8

    Spring Boot存储库POST响应

  9. 9

    Spring Boot JPA存储库错误

  10. 10

    Spring数据存储库-没有合格的bean注入

  11. 11

    使用Spring-Data-Solr注入存储库

  12. 12

    测试 Spring JPA 存储库(非 Spring Boot)

  13. 13

    如何使用Spring Boot从不同的软件包自动连接存储库接口?

  14. 14

    如何在带有粗存储库的Spring Boot中使用findAll方法

  15. 15

    Spring Boot:如何避免每个域类的 JPA 存储库过多

  16. 16

    Spring Boot 和 JPA 存储库——如何通过 ID 过滤 GET

  17. 17

    如何设置Spring Data JPA存储库?

  18. 18

    如何设置Spring Data JPA存储库?

  19. 19

    Spring MVC + Spring Data,在服务上注入存储库时出错

  20. 20

    使用自动连接的存储库测试Spring Boot MVC

  21. 21

    Spring Boot自动装配存储库始终为空

  22. 22

    Spring Boot检测到2个相同的存储库bean

  23. 23

    Spring Boot mongoDB 自动装配空存储库

  24. 24

    Spring Boot JPA Hibernate CRUD 存储库中的查找表

  25. 25

    在存储库中返回空点异常 - Spring Boot

  26. 26

    使用 Jpa 存储库测试的 Spring Boot 服务

  27. 27

    JPQL - Spring Boot 存储库查询 - 地图属性

  28. 28

    在 spring boot jpa 存储库中保留嵌入(相关)项目?

  29. 29

    Spring-Boot如何正确注入javax.validation.Validator

热门标签

归档