home.social

#selfinvocation — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #selfinvocation, aggregated by home.social.

  1. Дело о зависшем пуле: @Transactional, connection leak и deadlock в Spring Boot. Production-нуар

    Приложение было живо. Health check зелёный, CPU холодный, логи чистые. Но ни один запрос не возвращался. Детективная история о том, как пять соединений с базой держат в заложниках весь production. В деле: connection leak из легаси-отчёта, @Transactional , который вышел покурить вместе с чужим API, аннотация с фальшивым алиби, дуэль двух транзакций, REQUIRES_NEW с двойной бронью столиков — и один дворецкий, которого никто не подозревал, потому что его нанял сам фреймворк. Каждое преступление воспроизводится одной командой: демо-проект с Docker, Prometheus и Grafana прилагается. Открыть дело

    habr.com/ru/articles/1059234/

    #springboot #transactional #hikaricp #connectionpool #deadlock #postgresql #транзакции #selfinvocation #opensessioninview #микросервисы

  2. Дело о зависшем пуле: @Transactional, connection leak и deadlock в Spring Boot. Production-нуар

    Приложение было живо. Health check зелёный, CPU холодный, логи чистые. Но ни один запрос не возвращался. Детективная история о том, как пять соединений с базой держат в заложниках весь production. В деле: connection leak из легаси-отчёта, @Transactional , который вышел покурить вместе с чужим API, аннотация с фальшивым алиби, дуэль двух транзакций, REQUIRES_NEW с двойной бронью столиков — и один дворецкий, которого никто не подозревал, потому что его нанял сам фреймворк. Каждое преступление воспроизводится одной командой: демо-проект с Docker, Prometheus и Grafana прилагается. Открыть дело

    habr.com/ru/articles/1059234/

    #springboot #transactional #hikaricp #connectionpool #deadlock #postgresql #транзакции #selfinvocation #opensessioninview #микросервисы

  3. Дело о зависшем пуле: @Transactional, connection leak и deadlock в Spring Boot. Production-нуар

    Приложение было живо. Health check зелёный, CPU холодный, логи чистые. Но ни один запрос не возвращался. Детективная история о том, как пять соединений с базой держат в заложниках весь production. В деле: connection leak из легаси-отчёта, @Transactional , который вышел покурить вместе с чужим API, аннотация с фальшивым алиби, дуэль двух транзакций, REQUIRES_NEW с двойной бронью столиков — и один дворецкий, которого никто не подозревал, потому что его нанял сам фреймворк. Каждое преступление воспроизводится одной командой: демо-проект с Docker, Prometheus и Grafana прилагается. Открыть дело

    habr.com/ru/articles/1059234/

    #springboot #transactional #hikaricp #connectionpool #deadlock #postgresql #транзакции #selfinvocation #opensessioninview #микросервисы

  4. Анатомия Spring Proxy: кто и зачем подменяет ваши бины

    Совершенно точно каждый из нас (java-разработчиков), когда-либо встречал в своей жизни понятие "прокси" из Spring. Кто-то на уровне подготовки к собесам, а-ля "@Async создает прокси", а кто-то споткнувшись на self-invocation в собственном классе. И большинство, собственно как и я до определенного момента, часто удовлетворяются простым объяснением: "Spring использует AOP, создает прокси вокруг нашего бина и тем самым добавляет дополнительную логику до и после вызова метода." Но на мой взгляд этого понимания крайне недостаточно в современных условиях. Сегодня мы разберемся: Что такое этот $$SpringCGLIB$$0 , который неожиданно оказался вместо моего класса? Кто и в какой момент решил заменить мой бин? Откуда берутся загадочные Advisor и TransactionInterceptor , которые я никогда не создавал? Почему порядок выполнения аспектов именно такой? И что вообще физически находится внутри этого самого Proxy? Приглашаю Вас шаг за шагом проследить путь одного объекта: от обычного Java-бина до полностью собранного Spring Proxy. По дороге заглянуть в исходники Spring и посмотреть, как рождаются Advisor 'ы, как они сортируются, кто собирает прокси и из каких объектов он на самом деле состоит. Заглянуть

    habr.com/ru/articles/1051878/

    #java #spring_aop #proxy #прокси #cglib #JDK_Dynamic_Proxy #beanpostprocessor #AbstractAutoProxyCreator #transactional #Selfinvocation

  5. Анатомия Spring Proxy: кто и зачем подменяет ваши бины

    Совершенно точно каждый из нас (java-разработчиков), когда-либо встречал в своей жизни понятие "прокси" из Spring. Кто-то на уровне подготовки к собесам, а-ля "@Async создает прокси", а кто-то споткнувшись на self-invocation в собственном классе. И большинство, собственно как и я до определенного момента, часто удовлетворяются простым объяснением: "Spring использует AOP, создает прокси вокруг нашего бина и тем самым добавляет дополнительную логику до и после вызова метода." Но на мой взгляд этого понимания крайне недостаточно в современных условиях. Сегодня мы разберемся: Что такое этот $$SpringCGLIB$$0 , который неожиданно оказался вместо моего класса? Кто и в какой момент решил заменить мой бин? Откуда берутся загадочные Advisor и TransactionInterceptor , которые я никогда не создавал? Почему порядок выполнения аспектов именно такой? И что вообще физически находится внутри этого самого Proxy? Приглашаю Вас шаг за шагом проследить путь одного объекта: от обычного Java-бина до полностью собранного Spring Proxy. По дороге заглянуть в исходники Spring и посмотреть, как рождаются Advisor 'ы, как они сортируются, кто собирает прокси и из каких объектов он на самом деле состоит. Заглянуть

    habr.com/ru/articles/1051878/

    #java #spring_aop #proxy #прокси #cglib #JDK_Dynamic_Proxy #beanpostprocessor #AbstractAutoProxyCreator #transactional #Selfinvocation

  6. Анатомия Spring Proxy: кто и зачем подменяет ваши бины

    Совершенно точно каждый из нас (java-разработчиков), когда-либо встречал в своей жизни понятие "прокси" из Spring. Кто-то на уровне подготовки к собесам, а-ля "@Async создает прокси", а кто-то споткнувшись на self-invocation в собственном классе. И большинство, собственно как и я до определенного момента, часто удовлетворяются простым объяснением: "Spring использует AOP, создает прокси вокруг нашего бина и тем самым добавляет дополнительную логику до и после вызова метода." Но на мой взгляд этого понимания крайне недостаточно в современных условиях. Сегодня мы разберемся: Что такое этот $$SpringCGLIB$$0 , который неожиданно оказался вместо моего класса? Кто и в какой момент решил заменить мой бин? Откуда берутся загадочные Advisor и TransactionInterceptor , которые я никогда не создавал? Почему порядок выполнения аспектов именно такой? И что вообще физически находится внутри этого самого Proxy? Приглашаю Вас шаг за шагом проследить путь одного объекта: от обычного Java-бина до полностью собранного Spring Proxy. По дороге заглянуть в исходники Spring и посмотреть, как рождаются Advisor 'ы, как они сортируются, кто собирает прокси и из каких объектов он на самом деле состоит. Заглянуть

    habr.com/ru/articles/1051878/

    #java #spring_aop #proxy #прокси #cglib #JDK_Dynamic_Proxy #beanpostprocessor #AbstractAutoProxyCreator #transactional #Selfinvocation