springbatch从网络数据库读取

7gs2gvoe  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(238)

我有一个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时出错。要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2020-08-21 13:18:09.773错误1220---[main]o.s.b.d.LoggingFailureAnalysis报告程序:
应用程序启动失败
说明:
java.main.configuration.configuration.batchconfig中方法itemreader的参数0需要找不到类型为“javax.sql.datasource”的bean。
找到了以下候选对象,但无法注入:-未加载“jndidatasourceautoconfiguration”中的bean方法“datasource”,因为@conditionalonproperty(spring.datasource.jndi name)未找到属性“jndi name”-未加载“XadasourceAutoConfiguration”中的bean方法“datasource”,因为@conditionalonclass未找到属性“jndi name”必需类“javax.transaction.transactionmanager”
行动:
考虑重新访问上面的条目,或者在配置中定义一个“javax.sql.datasource”类型的bean。

daolsyd0

daolsyd01#

javax.sql.DataSource 是对远程/本地/嵌入式数据源的抽象。因此,您可以在何处将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批处理与 DataSource 对象,不(也不应该)知道它是本地的、远程的还是嵌入的。

相关问题