Инициализация метаданных Spring Batch с помощью репозитория заданий MongoDBJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Инициализация метаданных Spring Batch с помощью репозитория заданий MongoDB

Сообщение Anonymous »

Я работаю над проектом Spring Batch, который должен считывать данные из XML и записывать данные в MongoDB.
Я был приятно удивлен, увидев, что у Spring Batch появилась совершенно новая работа. поддержка репозитория для MongoDB, поэтому я решил попробовать.
К сожалению, я не могу понять, как настроить Spring так, чтобы метаданные пакета автоматически инициализировались при первом запуске пакета. Я должен указать, что мне нужен не встроенный источник данных для этого пакета, а внешний, который будет обрабатывать повторную попытку в случае сбоя потенциально длительного процесса.
Я инициализировал свой проект с такой конфигурацией:

Код: Выделить всё

@Bean
public JobLauncher jobLauncher(JobRepository jobRepository) {
TaskExecutorJobLauncher jobLauncher = new TaskExecutorJobLauncher();
jobLauncher.setJobRepository(jobRepository);
return jobLauncher;
}

@Bean
public MongoDatabaseFactory mongoDatabaseFactory(){
return new SimpleMongoClientDatabaseFactory("");
}

@Bean
public MongoTemplate mongoTemplate(MongoDatabaseFactory databaseFactory) {
return new MongoTemplate(databaseFactory);
}

@Bean
public MongoTransactionManager transactionManager(MongoDatabaseFactory databaseFactory) {
MongoTransactionManager mongoTransactionManager = new MongoTransactionManager();
mongoTransactionManager.setDatabaseFactory(databaseFactory);
mongoTransactionManager.afterPropertiesSet();
return mongoTransactionManager;
}

@Bean
public JobRepository jobRepository(MongoTemplate mongoTemplate, MongoTransactionManager transactionManager) throws Exception {
MongoJobRepositoryFactoryBean jobRepositoryFactoryBean = new MongoJobRepositoryFactoryBean();
jobRepositoryFactoryBean.setMongoOperations(mongoTemplate);
jobRepositoryFactoryBean.setTransactionManager(transactionManager);
jobRepositoryFactoryBean.afterPropertiesSet();
return jobRepositoryFactoryBean.getObject();
}
< /code>
Когда я выполняю свою Springbatchapplication, я получаю это исключение: < /p>
java.lang.NullPointerException: Cannot invoke "org.bson.Document.getLong(Object)" because the return value of "com.mongodb.client.MongoCollection.findOneAndUpdate(org.bson.conversions.Bson, org.bson.conversions.Bson, com.mongodb.client.model.FindOneAndUpdateOptions)"  is null
at org.springframework.batch.core.repository.dao.MongoSequenceIncrementer.lambda$nextLongValue$0(MongoSequenceIncrementer.java:51) \~\[spring-batch-core-5.2.1.jar:5.2.1\]
at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:603) \~\[spring-data-mongodb-4.4.1.jar:4.4.1\]
at org.springframework.batch.core.repository.dao.MongoSequenceIncrementer.nextLongValue(MongoSequenceIncrementer.java:47) \~\[spring-batch-core-5.2.1.jar:5.2.1\]
at org.springframework.batch.core.repository.dao.MongoJobInstanceDao.createJobInstance(MongoJobInstanceDao.java:80) \~\[spring-batch-core-5.2.1.jar:5.2.1\]
at org.springframework.batch.core.repository.support.SimpleJobRepository.createJobExecution(SimpleJobRepository.java:168) \~\[spring-batch-core-5.2.1.jar:5.2.1\]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) \~\[na:na\]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) \~\[na:na\]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) \~\[na:na\]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) \~\[na:na\]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) \~\[spring-aop-6.2.1.jar:6.2.1\]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) \~\[spring-aop-6.2.1.jar:6.2.1\]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) \~\[spring-aop-6.2.1.jar:6.2.1\]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:380) \~\[spring-tx-6.2.1.jar:6.2.1\]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) \~\[spring-tx-6.2.1.jar:6.2.1\]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) \~\[spring-aop-6.2.1.jar:6.2.1\]
at org.springframework.batch.core.repository.support.AbstractJobRepositoryFactoryBean.lambda$getObject$0(AbstractJobRepositoryFactoryBean.java:204) \~\[spring-batch-core-5.2.1.jar:5.2.1\]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) \~\[spring-aop-6.2.1.jar:6.2.1\]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) \~\[spring-aop-6.2.1.jar:6.2.1\]
at jdk.proxy2/jdk.proxy2.$Proxy41.createJobExecution(Unknown Source) \~\[na:na\]
at org.springframework.batch.core.launch.support.TaskExecutorJobLauncher.run(TaskExecutorJobLauncher.java:143) \~\[spring-batch-core-5.2.1.jar:5.2.1\]
at com.docoon.update_annuaire_replica.SpringBatchApplication.run(SpringBatchApplication.java:39) \~\[classes/:na\]
Похоже, что он ищет определенную последовательность в коллекции метаданных, но не может ее найти, поскольку схема еще не инициализирована. Я знаю, что с помощью конфигурации SQL это свойство можно установить:

Код: Выделить всё

spring.main.batch.jdbc.initalize-schema: true
Есть ли какой-либо эквивалент для конфигурации MongoDB, которую мне не хватает?

Подробнее здесь: https://stackoverflow.com/questions/793 ... repository
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»