Чтобы управлять государством или оказывать влияние на управление необязательно занимать какие-то государственные посты. Джугашвили долгое время не занимал вообще никаких государственных постов. Он занимал пост Генерального секретаря ЦК ВКП(б), но это не государственная, а политическая организация. Формально главой советского государства был Калинин. На деле же ключевых решений он не принимал.
В дальнейшем история повторилась с Брежневым. Формально главой государства был Подгорный, что иногда приводило к казусам во время зарубежных визитов, когда последнему оказывались государственные почести как первому лицу СССР.
В Британии всё ещё запутаннее, т.к. единого документа под названием "Конституция Соединённого Королевства" не существует. По обычаю монарх назначает ПМ лидера победившей на выборах партии, но это именно нигде не прописанный обычай. С другой стороны монарх может одним росчерком пера распустить парламент и ни один закон не вступает в силу без монаршего одобрения. Т.е. Елизавета не была декоративной фигурой, как иногда кажется.
Можно и Финляндию, где несменяемый Урхо Кекконен правил с 1956 по 1981 (!) годы и правил бы ещё, если бы не приболел. Или Британию и её Елизавету Вторую, заступившую на царствование при Джугашвили и просидевшую на троне 70 (!!!) лет. От несменяемости первых лиц этим странам не особо поплохело.
Но в статье сплошные антипаттерны на тему как делать не надо, подаются под соусом "вот так правильно"
Возможно мне стоило указать это прямо, но статья как раз о моих ошибках и о том, как делать не надо :) Executors.newCachedThreadPool() использован исключительно для контраста с fixedThreadPool()
Если есть необходимость создать свой собтсвенный пул потоков в spring, то делать это небходимо через его контекст. Тогда не надо будет думать над тем чтобы его завершить и делать костыли вида - @PreDestroy
В том-то и дело, что если мы говорим об ExecutorService, то graceful shutdown для него нужно прописывать руками безотносительно того, внедряется ли он через контекст или напрямую (как в моём примере). То, о чём вы говорите - это TaskExecutor, вот он управляется контекстом и гарантирует правильное завершение всех подзадач. В моём случае ExecutorService использовался по одной причине - я просто лучше знаю его АПИ, что было важно в условиях цейтнота.
Spring уже сам все умеет и не надо делать опять костыли вида - executor.awaitTermination.достаточно добавить настройку (server.shutdown=graceful)
В указанном вами примере речь опять же идёт о ThreadPoolTaskExecutor.
И оффер скорее всего вам не сделали
Оффер дали, но как и написал в первом предложении намерения уходить с текущего места не было, да и по деньгам предлагали сильно меньше желаемого.
1) обычные java CompletableFuture и ассинхроный неблокирующего хттп клиент который уже есть начиная с jdk11
2) spring reactor/webClient
3) coroutines/loom
По пунктам 2 и 3 согласен, по 1 скорее нет, т.к. предложенное вами решение очень громоздкое и трудночитаемое. Если есть сильное стремление использовать реактивщину, то почему бы не использовать reactive feign?
Явно прописан spring-профиль test. Все компоненты, содержащие аннотацию @Scheduled, отключены (через @Profile("!test")). Тесты, в рамках которых нужно проверить логику шедулеров, инжектят сервисы этих шедулеров и дёргают бизнес-логику ручками.
Почему бы не прописать отдельные значения для @Scheduled в application-test.yml?
Решения от Cognitive Technologies. Хотя сам вопрос о "большом и высокотехнологичном проекте" очень расплывчатый. Сейчас и добыча нефти весьма и весьма высокотехнологична, ибо там используется всё: от передовой химии до беспилотников для наблюдения за состоянием трубопроводов.
Ну, идея проистекает прямо из вашей реализации мока. Насколько я понимаю, это не просто заглушка, дающая установленный ответ на установленный запрос, а немного прокси, выполняющий запись в базу и реализующий некоторую логику.
Чтобы управлять государством или оказывать влияние на управление необязательно занимать какие-то государственные посты. Джугашвили долгое время не занимал вообще никаких государственных постов. Он занимал пост Генерального секретаря ЦК ВКП(б), но это не государственная, а политическая организация. Формально главой советского государства был Калинин. На деле же ключевых решений он не принимал.
В дальнейшем история повторилась с Брежневым. Формально главой государства был Подгорный, что иногда приводило к казусам во время зарубежных визитов, когда последнему оказывались государственные почести как первому лицу СССР.
В Британии всё ещё запутаннее, т.к. единого документа под названием "Конституция Соединённого Королевства" не существует. По обычаю монарх назначает ПМ лидера победившей на выборах партии, но это именно нигде не прописанный обычай. С другой стороны монарх может одним росчерком пера распустить парламент и ни один закон не вступает в силу без монаршего одобрения. Т.е. Елизавета не была декоративной фигурой, как иногда кажется.
Можно и Финляндию, где несменяемый Урхо Кекконен правил с 1956 по 1981 (!) годы и правил бы ещё, если бы не приболел. Или Британию и её Елизавету Вторую, заступившую на царствование при Джугашвили и просидевшую на троне 70 (!!!) лет. От несменяемости первых лиц этим странам не особо поплохело.
А, даже так. Теперь буду знать, спасибо!
Хах, про повышение скорости отключением QoS читал ещё году в 2009. В 2024, оказывается, тоже помогает :)
Котлин же как-то справился с этим
Совершенно непонятно, чем он хуже. Ну и в целом обороты вроде
Оставляют впечатление недосказанности
Благодарю за развёрнутый комментарий, плюсанул.
Возможно мне стоило указать это прямо, но статья как раз о моих ошибках и о том, как делать не надо :)
Executors.newCachedThreadPool()
использован исключительно для контраста сfixedThreadPool()
В том-то и дело, что если мы говорим об
ExecutorService
, то graceful shutdown для него нужно прописывать руками безотносительно того, внедряется ли он через контекст или напрямую (как в моём примере). То, о чём вы говорите - этоTaskExecutor
, вот он управляется контекстом и гарантирует правильное завершение всех подзадач. В моём случаеExecutorService
использовался по одной причине - я просто лучше знаю его АПИ, что было важно в условиях цейтнота.В указанном вами примере речь опять же идёт о
ThreadPoolTaskExecutor
.Оффер дали, но как и написал в первом предложении намерения уходить с текущего места не было, да и по деньгам предлагали сильно меньше желаемого.
По пунктам 2 и 3 согласен, по 1 скорее нет, т.к. предложенное вами решение очень громоздкое и трудночитаемое. Если есть сильное стремление использовать реактивщину, то почему бы не использовать reactive feign?
Ожидаю плодотворной дискуссии :)
На тему "какой поток что выполняет" есть неплохой доклад Сергея Куксенко https://www.youtube.com/watch?v=W7iK74YA5NM
Реактивщину я не очень хорошо знаю, увы, использовал блокирующее решение. И так еле уложился в 1 час
Точно нет, я бы запомнил и добавил в статью. А как бы вы семафором ограничили?
Спасибо, исправил
Спорное утверждение, да и заметка немного о другом :)
Явно прописан spring-профиль test. Все компоненты, содержащие аннотацию
@Scheduled
, отключены (через@Profile("!test")
). Тесты, в рамках которых нужно проверить логику шедулеров, инжектят сервисы этих шедулеров и дёргают бизнес-логику ручками.Почему бы не прописать отдельные значения для
@Scheduled в application-test.yml?
Вопрос в том, как от него теперь отпочковаться?
Насколько я понимаю, там коммерция. Компетенции и возможности у японцев есть.
С919 с мая уже используется для перевозок, 6 штук уже сделали и останавливаться не собираются.
MRJ же.
Есть ещё китайский "Комак". Также пассажирские самолёты делает "Митсубиси".
Решения от Cognitive Technologies. Хотя сам вопрос о "большом и высокотехнологичном проекте" очень расплывчатый. Сейчас и добыча нефти весьма и весьма высокотехнологична, ибо там используется всё: от передовой химии до беспилотников для наблюдения за состоянием трубопроводов.
Я надеюсь, это был сарказм. Потому что цветных фото того же Вильгельма II как-то тоже не сделали.
Ну, идея проистекает прямо из вашей реализации мока. Насколько я понимаю, это не просто заглушка, дающая установленный ответ на установленный запрос, а немного прокси, выполняющий запись в базу и реализующий некоторую логику.