Size: a a a

2020 June 25

AE

Alexandr Emelyanov in pro.jvm
Вспоминаем лекции Евгения Борисова, BeanPostProcessor + BeanFactory ваш выбор
источник

o

oxid in pro.jvm
Waldemar Tsiamruk
если у вас есть набор бинов который вы как-то хотите выбирать
Такая идея конечно есть, но основная штука в том что - выбор зависит от RequestScope бина, т.е на момент сборки контекста это прокси (на самом деле примерно так и сделоано сейчас и не работает). Иногда  эта «фабрика» уплывает в  CompletableFuture, где все падает 😉
источник

o

oxid in pro.jvm
По идее надо видимо отказаться от RequestScope
источник

o

oxid in pro.jvm
Сейчас там есть  @Bean @RequestScope Interface interface() {switch() {...} }
источник

o

oxid in pro.jvm
такая конструкция
источник

VG

Vladislav Gerasimov in pro.jvm
oxid
Такая идея конечно есть, но основная штука в том что - выбор зависит от RequestScope бина, т.е на момент сборки контекста это прокси (на самом деле примерно так и сделоано сейчас и не работает). Иногда  эта «фабрика» уплывает в  CompletableFuture, где все падает 😉
Если правильно понял суть, то Можно же при объявлении ThreadPoolTaskExecutor, который будет использоваться в Async методах, передавать контекст реквеста
И тогда CompleatableFuture не упадёт
источник

o

oxid in pro.jvm
можно, но следить чтобы все везде передавали не очень хочется
источник

o

oxid in pro.jvm
и помоему это не очень безопасно делать
источник

o

oxid in pro.jvm
если случайно это попадет в общий тред пул
источник

V

Vladimir in pro.jvm
кто —enable-preview юзает? Как эту штуку запустить в отладчике идеи? Собирается и запускается все прекрасно, но именно в отладчике при попытке выполнить выражение ломается
источник

D

Dima in pro.jvm
настройки проекта идеи и все
источник

V

Vladimir in pro.jvm
да вроде выставлено все
источник

V

Vladimir in pro.jvm
Project structure -> 14(Preview)
источник

V

Vladimir in pro.jvm
а в отладчике выражение не выполнить. Хотя сам отладчик бегает
источник

VG

Vladislav Gerasimov in pro.jvm
oxid
можно, но следить чтобы все везде передавали не очень хочется
я имел в виду один раз вот так
@EnableAsync
@Configuration
public class AsyncConfig {
private static Runnable decorate(Runnable runnable) {
 RequestAttributes context = RequestContextHolder.currentRequestAttributes();
 Map<String, String> contextMap = MDC.getCopyOfContextMap();
 return () -> {
  try {
   RequestContextHolder.setRequestAttributes(context);
   MDC.setContextMap(contextMap);
   runnable.run();
  } finally {
   MDC.clear();
   RequestContextHolder.resetRequestAttributes();
  }
 };
}

@Bean
public Executor taskExecutor() {
 ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
 executor.setTaskDecorator(AsyncConfig::decorate);

               ....
               return executor;
}
}
источник

AM

Aleksander Melnichni... in pro.jvm
oxid
можно, но следить чтобы все везде передавали не очень хочется
А не нужно, сделайте сервис, который будет принимать ваш runnable и при сабмите таски в пул, записывать данные из Request Context вызывающего треда в Request Context  треда в пуле, а по завершению задачи тред в блоке finally будет на всякий чистить свой контекст. Ну и желательно, чтобы передаваемый контекст был из немутабельных данных.
источник

AM

Aleksander Melnichni... in pro.jvm
Если данные в контексте мутабельные, желательно создавать копию их. Чтобы дочерний тред, не повлиял на данные в родительском.
источник

AM

Aleksander Melnichni... in pro.jvm
Есть ещё один хак, во всех спринговых holderах существует стратегия хранения, на память помню, что одна использует ThreadLocal, вторая InheritableThreadLocal. Можно выставить стратегию на inheritable, что это значит: при создании треда, треду потомку передаётся значение контекста родителя. Но, это работает, только если вы явно создаёте тред, а не используете пул с уже созданным кол-вом.
источник

EP

EnterpriseJira Plugi... in pro.jvm
Alexander Komarov
расскажи пожалуйста, какая принципиальная разница работать за зп программиста на свежем стеке в менее пафосном месте или на стеке говно-мамонта в Федеральном Банке ЗВР США ?
Кроме того у нас жесть: мы поддерживаем старый стек на проде, где ловля ошибок занимает неделю и переписываем постепенно все это на новый стек. И я не думаю, что мое присутствие на проекте будет продолжаться долго. Вы представляете пересадку прогера с Idea на Eclipse?
источник

WT

Waldemar Tsiamruk in pro.jvm
таких проектов не мало на сколько я знаю
источник