Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring batch с CompletableFuture или @Async / 25 сообщений из 25, страница 1 из 1
29.03.2020, 19:19
    #39942057
Hubertanyan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
Доброго времени суток!
Есть приложение в котором используется spring batch и асинхронные методы (@Async или CompletableFuture). Есть метод создания/сохранения сущности, который и является асинхронным(@Async или CompletableFuture):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@Async
public void createCar() {
   final Car car = new Car();
   car.setMarka("Subaru");
   car.setModel("Forester");
   car.setYear();
   //set another data
        
    carRepository.save(car);// carRepository - JpaRepository<Car, Long>
}


либо

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public void test() {
   CompletableFuture.supplyAsync(this::createCar).thenAccept(car -> System.out.println("success"));
}

public CompletableFuture<Car> createCar() {
   final Car car = new Car();
   car.setMarka("Subaru");
   car.setModel("Forester");
   car.setYear();
   //set another data

   return CompletableFuture.completedFuture(carRepository.save(car));// carRepository - JpaRepository<Car, Long>
}


либо

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public void createCar() {
   final Car car = new Car();
   car.setMarka("Subaru");
   car.setModel("Forester");
   car.setYear();
   //set another data

   CompletableFuture.supplyAsync(() -> carRepository.save(car));// carRepository - JpaRepository<Car, Long>
}


Но данные не сохраняются в базе. Как только я "отключаю" spring batch(убирая его из контекста spring), то сохранение в БД происходит. Ощущение, что spring batch что-то "перебивает" (транзакции?).
Заранее спасибо!
...
Рейтинг: 0 / 0
29.03.2020, 21:25
    #39942092
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
Выглядит так будто спринг просто не знает через что твою футуру исполнять и не исполняет ее.
...
Рейтинг: 0 / 0
29.03.2020, 21:31
    #39942096
Hubertanyan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
С определением через что выполнять тоже не срабатывает
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Bean("threadPoolTaskExecutor")
    public TaskExecutor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(20);
        executor.setMaxPoolSize(1000);
        executor.setWaitForTasksToCompleteOnShutdown(true);
        executor.setThreadNamePrefix("Async-");
        return executor;
    }


И потом
Код: java
1.
2.
@Async("threadPoolTaskExecutor")
....
...
Рейтинг: 0 / 0
30.03.2020, 11:21
    #39942179
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
ну тут два варианта - убедиться исполняется ли код репозитория. если нет то дальше копать конфиг спринга, если да то копать почему не сохраняется. у меня была похожая проблема правда с хибером но там решилось заменой форкджойна на что то там другое. уж и не помню деталей. надеюсь помог.
...
Рейтинг: 0 / 0
30.03.2020, 11:55
    #39942190
Hubertanyan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
andreykaT
ну тут два варианта - убедиться исполняется ли код репозитория. если нет то дальше копать конфиг спринга, если да то копать почему не сохраняется. у меня была похожая проблема правда с хибером но там решилось заменой форкджойна на что то там другое. уж и не помню деталей. надеюсь помог.


Если дебажить метод save, тот что в реализации SimpleJpaRepository

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Transactional
public <S extends T> S save(S entity) {
  if (this.entityInformation.isNew(entity)) {
     this.em.persist(entity);
     return entity;
  } else {
     return this.em.merge(entity);
  }
}


то он выполняется и ошибок не наблюдается. Но есть разница в самом объекте - если отключить batch, то в сохраняемой сущности есть заполненный id, если же batch не отключать, то id = null.

Т.е. без batch
Код: java
1.
"Car {id=1,  marka='Subaru', model='Forester',....}"



С batch
Код: java
1.
"Car {id=null,  marka='Subaru', model='Forester',....}"
...
Рейтинг: 0 / 0
30.03.2020, 20:24
    #39942344
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
Hubertanyan
spring batch
вопрос должен звучать так: "Помогите найти Hello world spring batch."
...
Рейтинг: 0 / 0
30.03.2020, 20:55
    #39942353
Hubertanyan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
PetroNotC Sharp
Hubertanyan
spring batch
вопрос должен звучать так: "Помогите найти Hello world spring batch."

Непонятно к чему это...
...
Рейтинг: 0 / 0
30.03.2020, 21:14
    #39942359
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
Hubertanyan
PetroNotC Sharp
пропущено...
вопрос должен звучать так: "Помогите найти Hello world spring batch."

Непонятно к чему это...
перевожу.
Кто тебе сказал что эта связка вообще должна работать?
Опять не понял?
...
Рейтинг: 0 / 0
30.03.2020, 21:20
    #39942361
Hubertanyan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
PetroNotC Sharp
Hubertanyan
пропущено...

Непонятно к чему это...
перевожу.
Кто тебе сказал что эта связка вообще должна работать?
Опять не понял?

Никто не сказал - вот собственно и возник вопрос. Я же не утверждаю, что оно должно работать...
Хотя если добавить к @Async @Transactional, то сохранение работает
...
Рейтинг: 0 / 0
30.03.2020, 21:27
    #39942362
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
Hubertanyan
Никто не сказал - вот собственно и возник вопрос. Я же не утверждаю, что оно должно работать...
ну тогда не тыкают бездумно код. Зачем ты его вообще написал?
Из книги?
Из головы?
Приснился?
....
Я обычно пример в сети ищу при изучении нового.
...

Hubertanyan
Хотя если добавить к @Async @Transactional, то сохранение работает

Значит вопрос закрыт?
...
Рейтинг: 0 / 0
30.03.2020, 21:34
    #39942364
Hubertanyan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
PetroNotC Sharp
Hubertanyan
Никто не сказал - вот собственно и возник вопрос. Я же не утверждаю, что оно должно работать...
ну тогда не тыкают бездумно код. Зачем ты его вообще написал?
Из книги?
Из головы?
Приснился?
....
Я обычно пример в сети ищу при изучении нового.
...

Hubertanyan
Хотя если добавить к @Async @Transactional, то сохранение работает

Значит вопрос закрыт?

1. Я не тыкаю бездумно код
2. Написал как пример, чтобы описать проблему, см. первое сообщение
3. Конечно же были поиски в сети, ничего подобного не нашел
4. Если такая связка не будет работать, то видимо вопрос закрыт
...
Рейтинг: 0 / 0
30.03.2020, 21:49
    #39942368
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
Hubertanyan
1. Я не тыкаю бездумно код
2. Написал как пример, чтобы описать проблему, см. первое сообщение
3. Конечно же были поиски в сети, ничего подобного не нашел

Извини, но по ТВОЕЙ лигике ты написал код, которого нет в сети и непонятно зачем.
"ничего личного"
...
Рейтинг: 0 / 0
30.03.2020, 21:56
    #39942370
Hubertanyan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
PetroNotC Sharp
Hubertanyan
1. Я не тыкаю бездумно код
2. Написал как пример, чтобы описать проблему, см. первое сообщение
3. Конечно же были поиски в сети, ничего подобного не нашел

Извини, но по ТВОЕЙ лигике ты написал код, которого нет в сети и непонятно зачем.
"ничего личного"

Почему мой код должен быть в сети? Я ТЕБЕ написал для чего я привёл код выше, но ты видимо со своей ЛОГИКОЙ никак не поймёшь, "ничего личного". Если по существу ответить нечего, то проходи мимо....
...
Рейтинг: 0 / 0
30.03.2020, 22:17
    #39942374
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
Hubertanyan
Я ТЕБЕ написал для чего я привёл код выше
просто дай цитату и всё))).
Для чего этот код.
Если для сохранения в базу, то это глупо.
...
Рейтинг: 0 / 0
31.03.2020, 08:07
    #39942416
Hubertanyan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
PetroNotC Sharp
Hubertanyan
Я ТЕБЕ написал для чего я привёл код выше
просто дай цитату и всё))).
Для чего этот код.
Если для сохранения в базу, то это глупо.

Есть некая долгая операция, которую запускает клиент(клиента не должны блокировать). После окончания этой операции нужно внести изменения в БД(сохранить в БД)
...
Рейтинг: 0 / 0
31.03.2020, 08:39
    #39942422
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
PetroNotC Sharp
Hubertanyan
Я ТЕБЕ написал для чего я привёл код выше
просто дай цитату и всё))).
Для чего этот код.
Если для сохранения в базу, то это глупо.

Странный вопрос. Для того чтоб асинхронно сохранить данные в базу. Не?
...
Рейтинг: 0 / 0
31.03.2020, 09:10
    #39942426
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
Hubertanyan
PetroNotC Sharp
пропущено...
просто дай цитату и всё))).
Для чего этот код.
Если для сохранения в базу, то это глупо.

Есть некая долгая операция, которую запускает клиент(клиента не должны блокировать). После окончания этой операции нужно внести изменения в БД(сохранить в БД)


Если говорить за Spring, стоит посмотреть в сторону Web on Reactive Stack .
...
Рейтинг: 0 / 0
31.03.2020, 09:12
    #39942427
Hubertanyan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
mad_nazgul
Hubertanyan
пропущено...

Есть некая долгая операция, которую запускает клиент(клиента не должны блокировать). После окончания этой операции нужно внести изменения в БД(сохранить в БД)


Если говорить за Spring, стоит посмотреть в сторону Web on Reactive Stack .

Да, спасибо! Уже тоже решил в эту сторону посмотреть
...
Рейтинг: 0 / 0
31.03.2020, 09:14
    #39942429
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
andreykaT
Странный вопрос. Для того чтоб асинхронно сохранить данные в базу. Не?

мы же рассуждаем. Если автор дает пищу для рассуждений.
Например, клиент может не ждать, а закрыть вкладку. Это значит что мы Асинхронно запишем в БД?
Или клиент запустил запрос по AJAХ - это Асинхронно?
...
Рейтинг: 0 / 0
31.03.2020, 10:35
    #39942462
artas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
Hubertanyan,

похоже что транзакция заканчивается к тому времени, когда выполняется save во future методе
...
Рейтинг: 0 / 0
31.03.2020, 14:16
    #39942543
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
Zzz79
А вооще по логике - JPArepa
должен все сохранить-что ему пришло
так как по сути это энд поинт вашего приложения

Стас. Чо как? Как твоя карантино-удалёнка? Работодатель на плаву?
...
Рейтинг: 0 / 0
31.03.2020, 14:27
    #39942549
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
artas
Hubertanyan,

похоже что транзакция заканчивается к тому времени, когда выполняется save во future методе

так у него когда транзакшенал стоит тогда ок. а когда не стоит тогда не ок. кек. у меня была другая проблема. без транзакшнл работало а с транзакшнл нет. причем без транзакшнл работало без транзакций. а вообще многопоточка и спринг дата это хрень с непонятным и неожиданным поведением. может хотя я просто его готовить не умел. когда я сюда пришел пожаловаться пару лет назад мне сказали не юзай спринг дату и многопоточку :)
...
Рейтинг: 0 / 0
31.03.2020, 17:01
    #39942611
artas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
[quot andreykaT#22108789]
artas
Hubertanyan,
когда я сюда пришел пожаловаться пару лет назад мне сказали не юзай спринг дату и многопоточку :)


правильно кстати сказали. Хибернейт+мультитред - туда же. + какой практический смысл от future при сохранении объекта ?
...
Рейтинг: 0 / 0
31.03.2020, 17:06
    #39942616
Hubertanyan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
[quot artas#22108908]
andreykaT
пропущено...


правильно кстати сказали. Хибернейт+мультитред - туда же. + какой практический смысл от future при сохранении объекта ?

Да не столько важно future или void, сколько важно асинхронное сохранение в БД. (если я правильно понял Ваш вопрос)
...
Рейтинг: 0 / 0
31.03.2020, 17:32
    #39942628
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring batch с CompletableFuture или @Async
Hubertanyan,
Ну дак и не смешивайте в вопросе винегрет.
Спринг/асинхронность/future/контейнер
Изучайте последовательно и по одному.
Hello world вам в помощь.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring batch с CompletableFuture или @Async / 25 сообщений из 25, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]