从网络数据库中读取 Spring Batch

SpringBatch Read from Networked Database

我有一个 springbatch 应用程序,我将在其中连接到网络数据库进行读取。我发现的大多数示例都嵌入了数据库,以便进行独立测试。我不想那样做。我不确定配置是否相似。这是我所拥有的最重要的部分(有些混淆):

@Configuration
@EnableBatchProcessing
public class BatchConfig {


    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;


    private static final String GET_DATA =
        "SELECT " +
                "stuffA, " +
                "stuffB, " +
                "FROM STUFF_TABLE " +
                "ORDER BY stuffA ASC";

    @Bean
    public ItemReader<StuffDto> itemReader(DataSource dataSource) {
        return new JdbcCursorItemReaderBuilder<StuffDto>()
            .name("cursorItemReader")
            .dataSource(dataSource)
            .sql(GET_DATA)
            .rowMapper(new BeanPropertyRowMapper<>(StuffDto.class))
            .build();
}

....

,然后从应用程序启动它:

@SpringBootApplication
@EnableBatchProcessing
public class BatchApplication {

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

我没有配置数据源。我不确定,因为我的本质上只是一个到远程网络数据库的客户端连接,所以它的配置是否与我找到的各种示例的嵌入式设置不同。所以我自然会得到错误(如下)。我只是在寻找一个简单的配置来实例化连接到我的远程数据库的数据源。

感谢您的回复

。 . .

启动 ApplicationContext 时出错。要显示条件报告,请重新 运行 您的应用程序并启用 'debug'。 2020-08-21 13:18:09.773 错误 1220 --- [主要] o.s.b.d.LoggingFailureAnalysisReporter :


应用程序启动失败


描述:

java.main.configuration.configuration.BatchConfig 中方法 itemReader 的参数 0 需要找不到类型 'javax.sql.DataSource' 的 bean。

已找到以下候选人但无法注入: - 'JndiDataSourceAutoConfiguration' 中的 Bean 方法 'dataSource' 未加载,因为 @ConditionalOnProperty (spring.datasource.jndi-name) 未找到 属性 'jndi-name' - 'XADataSourceAutoConfiguration' 中的 Bean 方法 'dataSource' 未加载,因为 @ConditionalOnClass 未找到所需的 class 'javax.transaction.TransactionManager'

操作:

考虑重新访问上面的条目或在您的配置中定义类型为 'javax.sql.DataSource' 的 bean。

javax.sql.DataSource 是对 remote/local/embedded 数据源的抽象。所以这是一个配置问题,您可以在其中将 JDBC 连接字符串设置为远程数据库主机。这是远程 MySQL 数据源的示例:

@Bean
public DataSource dataSource() {
    MysqlDataSource datasource = new MysqlDataSource();
    // config values could be injected from properties/environment variables
    datasource.setURL("jdbc:mysql://REMOTE_HOST:PORT/schema");
    datasource.setUser("username");
    datasource.setPassword("passord");
    return datasource;
}

Spring Batch 使用 DataSource 对象并且不知道(也不应该)知道它是本地的、远程的还是嵌入式的。