#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. Я создал второй класс кофигурации с компонентом, подобным вашему выше. создал этот компонент источника данных в отдельном классе. У приложения теперь есть источник данных, который оно может найти.