当前位置: 首页 > 知识库问答 >
问题:

Spring Boot(批处理)-注入数据源

子车飞文
2023-03-14

我有一个Spring Boot(面向批处理)应用程序,它使用一个数据源来完成批处理作业,并将内容写入数据库。

我在应用程序中定义了数据源。yml类似:

spring:
  datasource:
    url: jdbc:h2:mem:JavaSpringBootBatch
    username: sa
    password:
  profiles: # default, development, production
    active: default, development
---
spring:
  h2:
    # ...config/settings here
  profiles: development
---
spring:
  datasource:
    # ...datasource config here
  profiles: production

问题是,当我尝试将数据源注入一个Spring配置文件时:

@Configuration
public class PlayerBatchConfig {
  ...

  @Bean
  public ItemWriter<Player> writer(final DataSource dataSource) {
    final JdbcBatchItemWriter<Player> jdbcItemWriter = new JdbcBatchItemWriter<>();
    ...
    jdbcItemWriter.setDataSource(dataSource);
    jdbcItemWriter.setSql(sql.toString());
    return jdbcItemWriter;
  }
}

...它告诉我:

无法自动连线。存在多个“DataSource”类型的bean。

Beans:数据源

我还尝试注入数据源,例如:

@Configuration
public class PlayerBatchConfig {
  @Bean
  @ConfigurationProperties(prefix = "datasource")
  public DataSource dataSource() {
    return DataSourceBuilder.create().build();
  }

  ...
}

...但是没有运气:(,尽管这两个数据源的问题最终消失了。

有什么线索可以“绕过”吗?

共有2个答案

唐钊
2023-03-14

您要使用的DataSource@主注释,请参阅此处的spring-boot留档以获取更多信息。除了@主,您可能还需要使用@Qualifier来控制bean注入。

濮阳俊明
2023-03-14

因为您有两个数据源,所以需要使用@Qualifier对它们进行注释,即datasources bean,以及何时使用它们。Spring告诉你它不知道你想用哪一个。

 类似资料:
  • 主要内容:使用Rem语句注释,注释使用::声明为创建的脚本添加注释或文档总是一个好习惯。 这是一个维护脚本用来理解脚本实际所做的事情所必需的注释。 例如,考虑下面这段没有注释形式的代码。 如果一个没有任何注释的脚本,普通人试图理解脚本,那么需要很多时间来理解脚本做些什么工作。 使用Rem语句注释 有两种方法可以在批处理脚本中创建注释; 一个是通过命令。 语句后的任何文本都将被视为注释,不会被执行。 以下是此声明的一般语法。 语法 其中是需要添

  • 我需要访问两个数据源: Spring批处理存储库:在内存H2中 我的步骤需要访问。 我在那里看到了几个关于如何创建自定义

  • 注册表是Windows系统的关键要素之一。 它包含有关操作系统各个方面的大量信息。 几乎所有安装在Windows系统上的应用程序都以某种形式与注册表交互。 注册表包含两个基本元素:键和值。 注册表项是与文件夹类似的容器对象。 注册表值是与文件类似的非容器对象。键可能包含值或其他键。 使用类似于Windows路径名称的语法来引用键,并使用反斜杠来指示层次结构的级别。 本章介绍查询值,添加,删除和编辑

  • 我的数据库中有大约1000万个blob格式的文件,我需要转换并以pdf格式保存它们。每个文件大小约为0.5-10mb,组合文件大小约为20 TB。我正在尝试使用spring批处理实现该功能。然而,我的问题是,当我运行批处理时,服务器内存是否可以容纳那么多的数据?我正在尝试使用基于块的处理和线程池任务执行器。请建议运行作业的最佳方法是否可以在更短的时间内处理如此多的数据

  • 我试图在Spark中创建成批的行。为了保持发送到服务的记录数量,我想对项目进行批处理,这样我就可以保持数据发送的速率。对于, 对于给定的我想创建 例如,如果输入有100条记录,那么输出应该像一样,其中每个应该是记录(Person)的列表。 我试过了,但没用。 我想在Hadoop集群上运行此作业。有人能帮我吗?

  • 问题内容: 我有一个dao,它基本上使用hibernate将记录插入到一​​个表中,该dao用标记为注释,并且我有一个服务,该服务会生成其他一些东西,然后调用我的dao。我的服务也标注了使用。 我叫服务循环。我在dao上的插入内容是否可以批量或一个接一个地工作?我如何确定它们可以批量工作?hibernateTransaction Manager是否管理批处理插入? 我正在使用Oracle DB。