Чтение SpringBatch из сетевой базы данных

#java #spring-boot #spring-batch

#java #весенняя загрузка #spring-batch

Вопрос:

У меня есть приложение 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 — [ main] o.s.b.d.LoggingFailureAnalysisReporter :


НЕ УДАЛОСЬ ЗАПУСТИТЬ ПРИЛОЖЕНИЕ


Описание:

Параметр 0 метода ItemReader в java.main.configuration.configuration.Для BatchConfig требовался компонент типа ‘javax.sql.DataSource’, который не удалось найти.

Были найдены следующие кандидаты, но их не удалось внедрить: — Метод компонента ‘DataSource’ в ‘JndiDataSourceAutoConfiguration’ не загружен, потому что @ConditionalOnProperty (spring.datasource.jndi-name) не нашел свойство ‘jndi-name’ — Метод компонента ‘DataSource’ в ‘XADataSourceAutoConfiguration’ не загружен, потому что @ConditionalOnClass не нашел требуемый класс ‘javax.transaction.TransactionManager’

Экшен:

Рассмотрите возможность пересмотра приведенных выше записей или определения компонента типа ‘javax.sql.DataSource’ в вашей конфигурации.

Ответ №1:

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 Batch работает с DataSource объектом и не знает (и не должен знать), является ли он локальным, удаленным или встроенным.

Комментарии:

1. спасибо @Mahmoud. Я создал второй класс кофигурации с компонентом, подобным вашему выше. создал этот компонент источника данных в отдельном классе. У приложения теперь есть источник данных, который оно может найти.