home.social

#spring_boot — Public Fediverse posts

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

  1. Шёл за утечкой памяти, нашёл утечку диска: SXSSFWorkbook без dispose() в Apache POI

    Меня зовут Игорь Симаков, работаю engineering manager’ом и руковожу командами разработки На одном из наших сервисов, который работает с XLSX-файлами, прилетел production-алерт на высокое потребление памяти. Стандартный P3, обычно решается рестартом. Пошёл смотреть поды и нашёл проблему, к памяти отношения не имеющую, но представляющую больший риск, чем сам алерт. Об этом и расскажу ниже: чем «утечка диска» отличается от «утечки памяти», как мы наткнулись на грабли в Apache POI и как закрыли их на уровне архитектуры

    habr.com/ru/articles/1039862/

    #apache_poi #утечка_памяти #kubernetes #java #rss #archunit #spring_boot #производительность

  2. Шёл за утечкой памяти, нашёл утечку диска: SXSSFWorkbook без dispose() в Apache POI

    Меня зовут Игорь Симаков, работаю engineering manager’ом и руковожу командами разработки На одном из наших сервисов, который работает с XLSX-файлами, прилетел production-алерт на высокое потребление памяти. Стандартный P3, обычно решается рестартом. Пошёл смотреть поды и нашёл проблему, к памяти отношения не имеющую, но представляющую больший риск, чем сам алерт. Об этом и расскажу ниже: чем «утечка диска» отличается от «утечки памяти», как мы наткнулись на грабли в Apache POI и как закрыли их на уровне архитектуры

    habr.com/ru/articles/1039862/

    #apache_poi #утечка_памяти #kubernetes #java #rss #archunit #spring_boot #производительность

  3. C# мне нравится больше Java. Но в банковском enterprise мне всё равно понадобилась Java

    C# я до сих пор считаю одним из самых удобных языков для backend разработки. В нём много вещей к которым быстро привыкаешь: свойства, LINQ, async/await, generics без type erasure, хороший tooling и понятная модель разработки. Но банковский enterprise редко выбирает стек только по удобству языка. На практике важны не только синтаксис и экосистема, но и инфраструктура, сопровождение, безопасность, регламенты, legacy, найм, CI/CD, требования к платформам и долгосрочная стратегия организации. Так я оказался в ситуации где C# мне субъективно нравится больше, но Java объективно стала полезнее в конкретном банковском контуре. Эта статья не про холивар C# vs Java. Это попытка спокойно разобрать почему backend разработчику в enterprise иногда приходится расширять стек, даже если текущий язык его полностью устраивает. Почему в банке выбирают стек не только по

    habr.com/ru/articles/1038626/

    #C# #Java #backend #enterprise #банки #Spring_Boot #NET #микросервисы #импортозамещение #карьера

  4. C# мне нравится больше Java. Но в банковском enterprise мне всё равно понадобилась Java

    C# я до сих пор считаю одним из самых удобных языков для backend разработки. В нём много вещей к которым быстро привыкаешь: свойства, LINQ, async/await, generics без type erasure, хороший tooling и понятная модель разработки. Но банковский enterprise редко выбирает стек только по удобству языка. На практике важны не только синтаксис и экосистема, но и инфраструктура, сопровождение, безопасность, регламенты, legacy, найм, CI/CD, требования к платформам и долгосрочная стратегия организации. Так я оказался в ситуации где C# мне субъективно нравится больше, но Java объективно стала полезнее в конкретном банковском контуре. Эта статья не про холивар C# vs Java. Это попытка спокойно разобрать почему backend разработчику в enterprise иногда приходится расширять стек, даже если текущий язык его полностью устраивает. Почему в банке выбирают стек не только по

    habr.com/ru/articles/1038626/

    #C# #Java #backend #enterprise #банки #Spring_Boot #NET #микросервисы #импортозамещение #карьера

  5. C# мне нравится больше Java. Но в банковском enterprise мне всё равно понадобилась Java

    C# я до сих пор считаю одним из самых удобных языков для backend разработки. В нём много вещей к которым быстро привыкаешь: свойства, LINQ, async/await, generics без type erasure, хороший tooling и понятная модель разработки. Но банковский enterprise редко выбирает стек только по удобству языка. На практике важны не только синтаксис и экосистема, но и инфраструктура, сопровождение, безопасность, регламенты, legacy, найм, CI/CD, требования к платформам и долгосрочная стратегия организации. Так я оказался в ситуации где C# мне субъективно нравится больше, но Java объективно стала полезнее в конкретном банковском контуре. Эта статья не про холивар C# vs Java. Это попытка спокойно разобрать почему backend разработчику в enterprise иногда приходится расширять стек, даже если текущий язык его полностью устраивает. Почему в банке выбирают стек не только по

    habr.com/ru/articles/1038626/

    #C# #Java #backend #enterprise #банки #Spring_Boot #NET #микросервисы #импортозамещение #карьера

  6. C# мне нравится больше Java. Но в банковском enterprise мне всё равно понадобилась Java

    C# я до сих пор считаю одним из самых удобных языков для backend разработки. В нём много вещей к которым быстро привыкаешь: свойства, LINQ, async/await, generics без type erasure, хороший tooling и понятная модель разработки. Но банковский enterprise редко выбирает стек только по удобству языка. На практике важны не только синтаксис и экосистема, но и инфраструктура, сопровождение, безопасность, регламенты, legacy, найм, CI/CD, требования к платформам и долгосрочная стратегия организации. Так я оказался в ситуации где C# мне субъективно нравится больше, но Java объективно стала полезнее в конкретном банковском контуре. Эта статья не про холивар C# vs Java. Это попытка спокойно разобрать почему backend разработчику в enterprise иногда приходится расширять стек, даже если текущий язык его полностью устраивает. Почему в банке выбирают стек не только по

    habr.com/ru/articles/1038626/

    #C# #Java #backend #enterprise #банки #Spring_Boot #NET #микросервисы #импортозамещение #карьера

  7. Как настроить observability в Spring Boot 3

    Микросервис работает, но иногда тормозит — и вы не знаете, где копать. Логи чистые, метрики в норме, а пользователи жалуются. Знакомо? В статье разбираем, как настроить полноценную observability в Spring Boot 3 за 7 шагов: метрики (Prometheus), трейсинг (Zipkin), логи (Loki) и единый дашборд в Grafana. Без магии, с кодом и проверками.

    habr.com/ru/companies/otus/art

    #java #Spring_Boot_3 #observability #микросервисы #метрики #трейсинг #Grafana #prometheus #Spring_Boot #Zipkin

  8. Как настроить observability в Spring Boot 3

    Микросервис работает, но иногда тормозит — и вы не знаете, где копать. Логи чистые, метрики в норме, а пользователи жалуются. Знакомо? В статье разбираем, как настроить полноценную observability в Spring Boot 3 за 7 шагов: метрики (Prometheus), трейсинг (Zipkin), логи (Loki) и единый дашборд в Grafana. Без магии, с кодом и проверками.

    habr.com/ru/companies/otus/art

    #java #Spring_Boot_3 #observability #микросервисы #метрики #трейсинг #Grafana #prometheus #Spring_Boot #Zipkin

  9. Как настроить observability в Spring Boot 3

    Микросервис работает, но иногда тормозит — и вы не знаете, где копать. Логи чистые, метрики в норме, а пользователи жалуются. Знакомо? В статье разбираем, как настроить полноценную observability в Spring Boot 3 за 7 шагов: метрики (Prometheus), трейсинг (Zipkin), логи (Loki) и единый дашборд в Grafana. Без магии, с кодом и проверками.

    habr.com/ru/companies/otus/art

    #java #Spring_Boot_3 #observability #микросервисы #метрики #трейсинг #Grafana #prometheus #Spring_Boot #Zipkin

  10. Как настроить observability в Spring Boot 3

    Микросервис работает, но иногда тормозит — и вы не знаете, где копать. Логи чистые, метрики в норме, а пользователи жалуются. Знакомо? В статье разбираем, как настроить полноценную observability в Spring Boot 3 за 7 шагов: метрики (Prometheus), трейсинг (Zipkin), логи (Loki) и единый дашборд в Grafana. Без магии, с кодом и проверками.

    habr.com/ru/companies/otus/art

    #java #Spring_Boot_3 #observability #микросервисы #метрики #трейсинг #Grafana #prometheus #Spring_Boot #Zipkin

  11. [Перевод] Соль и перец в безопасности паролей

    Безопасность данных сегодня стала главным приоритетом для любого веб-ресурса. Базовым стандартом защиты учетных записей является хеширование паролей. Этот процесс превращает конфиденциальные символы в необратимый код. Без него утечка базы данных мгновенно скомпрометирует пользователей. Однако обычного хеширования недостаточно из-за угрозы быстрых хакерских атак. Для защиты разработчики применяют «соль» (salt) — случайные данные, добавляемые к паролю. Минус соли в том, что она хранится рядом с хешем и не спасает от мощного перебора. Тогда на помощь приходит «перец» (pepper), скрытый в коде сервера. Его главная проблема — высокий риск потерять доступ ко всем аккаунтам при компрометации самого секретного ключа. Эта статья поможет вам разобраться в эволюции методов криптографической защиты. Вы узнаете, как правильно комбинировать эти инструменты для надежной аутентификации.

    habr.com/ru/companies/spring_a

    #java #kotlin #hash #cryptography #spring #spring_boot #spring_framework #spring_security #security #password

  12. [Перевод] Соль и перец в безопасности паролей

    Безопасность данных сегодня стала главным приоритетом для любого веб-ресурса. Базовым стандартом защиты учетных записей является хеширование паролей. Этот процесс превращает конфиденциальные символы в необратимый код. Без него утечка базы данных мгновенно скомпрометирует пользователей. Однако обычного хеширования недостаточно из-за угрозы быстрых хакерских атак. Для защиты разработчики применяют «соль» (salt) — случайные данные, добавляемые к паролю. Минус соли в том, что она хранится рядом с хешем и не спасает от мощного перебора. Тогда на помощь приходит «перец» (pepper), скрытый в коде сервера. Его главная проблема — высокий риск потерять доступ ко всем аккаунтам при компрометации самого секретного ключа. Эта статья поможет вам разобраться в эволюции методов криптографической защиты. Вы узнаете, как правильно комбинировать эти инструменты для надежной аутентификации.

    habr.com/ru/companies/spring_a

    #java #kotlin #hash #cryptography #spring #spring_boot #spring_framework #spring_security #security #password

  13. [Перевод] Соль и перец в безопасности паролей

    Безопасность данных сегодня стала главным приоритетом для любого веб-ресурса. Базовым стандартом защиты учетных записей является хеширование паролей. Этот процесс превращает конфиденциальные символы в необратимый код. Без него утечка базы данных мгновенно скомпрометирует пользователей. Однако обычного хеширования недостаточно из-за угрозы быстрых хакерских атак. Для защиты разработчики применяют «соль» (salt) — случайные данные, добавляемые к паролю. Минус соли в том, что она хранится рядом с хешем и не спасает от мощного перебора. Тогда на помощь приходит «перец» (pepper), скрытый в коде сервера. Его главная проблема — высокий риск потерять доступ ко всем аккаунтам при компрометации самого секретного ключа. Эта статья поможет вам разобраться в эволюции методов криптографической защиты. Вы узнаете, как правильно комбинировать эти инструменты для надежной аутентификации.

    habr.com/ru/companies/spring_a

    #java #kotlin #hash #cryptography #spring #spring_boot #spring_framework #spring_security #security #password

  14. [Перевод] Соль и перец в безопасности паролей

    Безопасность данных сегодня стала главным приоритетом для любого веб-ресурса. Базовым стандартом защиты учетных записей является хеширование паролей. Этот процесс превращает конфиденциальные символы в необратимый код. Без него утечка базы данных мгновенно скомпрометирует пользователей. Однако обычного хеширования недостаточно из-за угрозы быстрых хакерских атак. Для защиты разработчики применяют «соль» (salt) — случайные данные, добавляемые к паролю. Минус соли в том, что она хранится рядом с хешем и не спасает от мощного перебора. Тогда на помощь приходит «перец» (pepper), скрытый в коде сервера. Его главная проблема — высокий риск потерять доступ ко всем аккаунтам при компрометации самого секретного ключа. Эта статья поможет вам разобраться в эволюции методов криптографической защиты. Вы узнаете, как правильно комбинировать эти инструменты для надежной аутентификации.

    habr.com/ru/companies/spring_a

    #java #kotlin #hash #cryptography #spring #spring_boot #spring_framework #spring_security #security #password

  15. Сможете ли вы спроектировать Maven‑монорепозиторий для 5 микросервисов?

    В этой статье мы разберём реальную задачу на проектирование Maven Multi‑Module: от циклических зависимостей и неправильного использования spring‑boot‑maven‑plugin до смешения ролей агрегатора и родителя. Затем соберём эталонную структуру по лучшим практикам Spring Cloud и Netflix, добавим CI/CD‑диаграмму и научимся запускать сервис локально без Eureka и RabbitMQ. Найти ошибки

    habr.com/ru/companies/otus/art

    #Maven #монорепозиторий #микросервисы #Spring_Boot #multimodule #dependencyManagement #Maven_Wrapper #архитектура_сборки #Java

  16. Сможете ли вы спроектировать Maven‑монорепозиторий для 5 микросервисов?

    В этой статье мы разберём реальную задачу на проектирование Maven Multi‑Module: от циклических зависимостей и неправильного использования spring‑boot‑maven‑plugin до смешения ролей агрегатора и родителя. Затем соберём эталонную структуру по лучшим практикам Spring Cloud и Netflix, добавим CI/CD‑диаграмму и научимся запускать сервис локально без Eureka и RabbitMQ. Найти ошибки

    habr.com/ru/companies/otus/art

    #Maven #монорепозиторий #микросервисы #Spring_Boot #multimodule #dependencyManagement #Maven_Wrapper #архитектура_сборки #Java

  17. Сможете ли вы спроектировать Maven‑монорепозиторий для 5 микросервисов?

    В этой статье мы разберём реальную задачу на проектирование Maven Multi‑Module: от циклических зависимостей и неправильного использования spring‑boot‑maven‑plugin до смешения ролей агрегатора и родителя. Затем соберём эталонную структуру по лучшим практикам Spring Cloud и Netflix, добавим CI/CD‑диаграмму и научимся запускать сервис локально без Eureka и RabbitMQ. Найти ошибки

    habr.com/ru/companies/otus/art

    #Maven #монорепозиторий #микросервисы #Spring_Boot #multimodule #dependencyManagement #Maven_Wrapper #архитектура_сборки #Java

  18. Сможете ли вы спроектировать Maven‑монорепозиторий для 5 микросервисов?

    В этой статье мы разберём реальную задачу на проектирование Maven Multi‑Module: от циклических зависимостей и неправильного использования spring‑boot‑maven‑plugin до смешения ролей агрегатора и родителя. Затем соберём эталонную структуру по лучшим практикам Spring Cloud и Netflix, добавим CI/CD‑диаграмму и научимся запускать сервис локально без Eureka и RabbitMQ. Найти ошибки

    habr.com/ru/companies/otus/art

    #Maven #монорепозиторий #микросервисы #Spring_Boot #multimodule #dependencyManagement #Maven_Wrapper #архитектура_сборки #Java

  19. История одного // todo, который ждал своего часа пол года

    // todo: тут N+1 на invoice — надо переделать через entity graph. Этот комментарий висел в коде полтора года. Все, кто заходил в файл, его видели. Никто не завёл тикет. В пятницу вечером он сработал — и забрал с собой три пода, 30% запросов на критичной ручке и моё спокойствие на выходные.

    habr.com/ru/articles/1037972/

    #java #spring_boot #hibernate #n+1 #outofmemoryerror #постмортем #heap_dump #технический_долг #jpa

  20. История одного // todo, который ждал своего часа пол года

    // todo: тут N+1 на invoice — надо переделать через entity graph. Этот комментарий висел в коде полтора года. Все, кто заходил в файл, его видели. Никто не завёл тикет. В пятницу вечером он сработал — и забрал с собой три пода, 30% запросов на критичной ручке и моё спокойствие на выходные.

    habr.com/ru/articles/1037972/

    #java #spring_boot #hibernate #n+1 #outofmemoryerror #постмортем #heap_dump #технический_долг #jpa

  21. История одного // todo, который ждал своего часа пол года

    // todo: тут N+1 на invoice — надо переделать через entity graph. Этот комментарий висел в коде полтора года. Все, кто заходил в файл, его видели. Никто не завёл тикет. В пятницу вечером он сработал — и забрал с собой три пода, 30% запросов на критичной ручке и моё спокойствие на выходные.

    habr.com/ru/articles/1037972/

    #java #spring_boot #hibernate #n+1 #outofmemoryerror #постмортем #heap_dump #технический_долг #jpa

  22. История одного // todo, который ждал своего часа пол года

    // todo: тут N+1 на invoice — надо переделать через entity graph. Этот комментарий висел в коде полтора года. Все, кто заходил в файл, его видели. Никто не завёл тикет. В пятницу вечером он сработал — и забрал с собой три пода, 30% запросов на критичной ручке и моё спокойствие на выходные.

    habr.com/ru/articles/1037972/

    #java #spring_boot #hibernate #n+1 #outofmemoryerror #постмортем #heap_dump #технический_долг #jpa

  23. Spring AI: феноменология цифрового сознания, или Как я перестал бояться и полюбил облачные модели

    Привет. Меня зовут Николай Пискунов, я руководитель направления Big Data и эксперт курса Cloud DevSecOps по безопасной разработке от Академии вАЙТИ

    habr.com/ru/companies/beeline_

    #spring_ai #java #spring_boot #llm #ollama #openai #chatgpt #reactive_programming #streaming #sse

  24. Spring AI: феноменология цифрового сознания, или Как я перестал бояться и полюбил облачные модели

    Привет. Меня зовут Николай Пискунов, я руководитель направления Big Data и эксперт курса Cloud DevSecOps по безопасной разработке от Академии вАЙТИ

    habr.com/ru/companies/beeline_

    #spring_ai #java #spring_boot #llm #ollama #openai #chatgpt #reactive_programming #streaming #sse

  25. Spring AI: феноменология цифрового сознания, или Как я перестал бояться и полюбил облачные модели

    Привет. Меня зовут Николай Пискунов, я руководитель направления Big Data и эксперт курса Cloud DevSecOps по безопасной разработке от Академии вАЙТИ

    habr.com/ru/companies/beeline_

    #spring_ai #java #spring_boot #llm #ollama #openai #chatgpt #reactive_programming #streaming #sse

  26. Spring AI: феноменология цифрового сознания, или Как я перестал бояться и полюбил облачные модели

    Привет. Меня зовут Николай Пискунов, я руководитель направления Big Data и эксперт курса Cloud DevSecOps по безопасной разработке от Академии вАЙТИ

    habr.com/ru/companies/beeline_

    #spring_ai #java #spring_boot #llm #ollama #openai #chatgpt #reactive_programming #streaming #sse

  27. [Перевод] Эволюция API без боли: ArchUnit, Gradle и правила для библиотек

    В Netflix тысячи Java-репозиториев. Когда в библиотеку вносят изменение, часть пользователей может перестать собираться или начать работать некорректно. Чаще всгео эта проблема возникает потому, что public контракты являются public только для авторов библиотеки, а не для пользователей. С новом переводе от команды Spring АйО разбираемся, как ребята из Netflix ввели простые метки для API: @Public - можно использовать снаружи, @Experimental - тоже можно, но интерфейс может меняться, @Deprecated - готовится к удалению. Все остальное считается внутренним и использованию извне не подлежит. Но сами аннотации проблему не решают, нужна проверка на масштабе. Решение - ArchUnit + Nebula ArchRules. ArchUnit анализирует скомпилированный байткод, поэтому одинаково работает для Java/Kotlin/Scala и проверяет реальный код на classpath. Команды пишут правила (например: «вне пакета библиотеки нельзя зависеть от ее deprecated/internal API»), публикуют их как отдельный arch-rules JAR, а runner автоматически запускает проверки в репозиториях и делает отчеты с точной строкой нарушения.

    habr.com/ru/companies/spring_a

    #java #kotlin #api #versioning #neflix #spring #spring_boot #spring_framework #springboot

  28. [Перевод] Эволюция API без боли: ArchUnit, Gradle и правила для библиотек

    В Netflix тысячи Java-репозиториев. Когда в библиотеку вносят изменение, часть пользователей может перестать собираться или начать работать некорректно. Чаще всгео эта проблема возникает потому, что public контракты являются public только для авторов библиотеки, а не для пользователей. С новом переводе от команды Spring АйО разбираемся, как ребята из Netflix ввели простые метки для API: @Public - можно использовать снаружи, @Experimental - тоже можно, но интерфейс может меняться, @Deprecated - готовится к удалению. Все остальное считается внутренним и использованию извне не подлежит. Но сами аннотации проблему не решают, нужна проверка на масштабе. Решение - ArchUnit + Nebula ArchRules. ArchUnit анализирует скомпилированный байткод, поэтому одинаково работает для Java/Kotlin/Scala и проверяет реальный код на classpath. Команды пишут правила (например: «вне пакета библиотеки нельзя зависеть от ее deprecated/internal API»), публикуют их как отдельный arch-rules JAR, а runner автоматически запускает проверки в репозиториях и делает отчеты с точной строкой нарушения.

    habr.com/ru/companies/spring_a

    #java #kotlin #api #versioning #neflix #spring #spring_boot #spring_framework #springboot

  29. [Перевод] Эволюция API без боли: ArchUnit, Gradle и правила для библиотек

    В Netflix тысячи Java-репозиториев. Когда в библиотеку вносят изменение, часть пользователей может перестать собираться или начать работать некорректно. Чаще всгео эта проблема возникает потому, что public контракты являются public только для авторов библиотеки, а не для пользователей. С новом переводе от команды Spring АйО разбираемся, как ребята из Netflix ввели простые метки для API: @Public - можно использовать снаружи, @Experimental - тоже можно, но интерфейс может меняться, @Deprecated - готовится к удалению. Все остальное считается внутренним и использованию извне не подлежит. Но сами аннотации проблему не решают, нужна проверка на масштабе. Решение - ArchUnit + Nebula ArchRules. ArchUnit анализирует скомпилированный байткод, поэтому одинаково работает для Java/Kotlin/Scala и проверяет реальный код на classpath. Команды пишут правила (например: «вне пакета библиотеки нельзя зависеть от ее deprecated/internal API»), публикуют их как отдельный arch-rules JAR, а runner автоматически запускает проверки в репозиториях и делает отчеты с точной строкой нарушения.

    habr.com/ru/companies/spring_a

    #java #kotlin #api #versioning #neflix #spring #spring_boot #spring_framework #springboot

  30. [Перевод] Эволюция API без боли: ArchUnit, Gradle и правила для библиотек

    В Netflix тысячи Java-репозиториев. Когда в библиотеку вносят изменение, часть пользователей может перестать собираться или начать работать некорректно. Чаще всгео эта проблема возникает потому, что public контракты являются public только для авторов библиотеки, а не для пользователей. С новом переводе от команды Spring АйО разбираемся, как ребята из Netflix ввели простые метки для API: @Public - можно использовать снаружи, @Experimental - тоже можно, но интерфейс может меняться, @Deprecated - готовится к удалению. Все остальное считается внутренним и использованию извне не подлежит. Но сами аннотации проблему не решают, нужна проверка на масштабе. Решение - ArchUnit + Nebula ArchRules. ArchUnit анализирует скомпилированный байткод, поэтому одинаково работает для Java/Kotlin/Scala и проверяет реальный код на classpath. Команды пишут правила (например: «вне пакета библиотеки нельзя зависеть от ее deprecated/internal API»), публикуют их как отдельный arch-rules JAR, а runner автоматически запускает проверки в репозиториях и делает отчеты с точной строкой нарушения.

    habr.com/ru/companies/spring_a

    #java #kotlin #api #versioning #neflix #spring #spring_boot #spring_framework #springboot

  31. [Перевод] Kotlin переходит к деструктурированию по именам

    В Kotlin деструктурирование выглядело так: val (name, age) = person . Но компилятор берет значения не по именам, а по позиции component1/component2 . Отсюда проблемы. Если поменяли порядок параметров в data class или сделали age вычисляемым свойством: то та же строка начинает доставать другое поле. Причем иногда код даже скомпилируется, но, конечно, смысл изменится: val (age, name) = person . И вот теперь Kotlin эксперементально переводит круглые скобки на деструктурирование по имени. Синтаксис будет такой: (val name, val age) = person . И порядок внутри скобок не важен. Переименование явно: (val years = age, val theName = name) = person . Позиционное же деструктурирование остается, но переезжает в квадратные скобки для Pair/Triple и коллекций: val [x, y] = point . Разбираемся полностью в новом переводе от команды Spring АйО .

    habr.com/ru/companies/spring_a

    #java #kotlin #spring #spring_boot #java_core #kotlin_multiplatform #kotlin_dsl

  32. [Перевод] Kotlin переходит к деструктурированию по именам

    В Kotlin деструктурирование выглядело так: val (name, age) = person . Но компилятор берет значения не по именам, а по позиции component1/component2 . Отсюда проблемы. Если поменяли порядок параметров в data class или сделали age вычисляемым свойством: то та же строка начинает доставать другое поле. Причем иногда код даже скомпилируется, но, конечно, смысл изменится: val (age, name) = person . И вот теперь Kotlin эксперементально переводит круглые скобки на деструктурирование по имени. Синтаксис будет такой: (val name, val age) = person . И порядок внутри скобок не важен. Переименование явно: (val years = age, val theName = name) = person . Позиционное же деструктурирование остается, но переезжает в квадратные скобки для Pair/Triple и коллекций: val [x, y] = point . Разбираемся полностью в новом переводе от команды Spring АйО .

    habr.com/ru/companies/spring_a

    #java #kotlin #spring #spring_boot #java_core #kotlin_multiplatform #kotlin_dsl

  33. [Перевод] Kotlin переходит к деструктурированию по именам

    В Kotlin деструктурирование выглядело так: val (name, age) = person . Но компилятор берет значения не по именам, а по позиции component1/component2 . Отсюда проблемы. Если поменяли порядок параметров в data class или сделали age вычисляемым свойством: то та же строка начинает доставать другое поле. Причем иногда код даже скомпилируется, но, конечно, смысл изменится: val (age, name) = person . И вот теперь Kotlin эксперементально переводит круглые скобки на деструктурирование по имени. Синтаксис будет такой: (val name, val age) = person . И порядок внутри скобок не важен. Переименование явно: (val years = age, val theName = name) = person . Позиционное же деструктурирование остается, но переезжает в квадратные скобки для Pair/Triple и коллекций: val [x, y] = point . Разбираемся полностью в новом переводе от команды Spring АйО .

    habr.com/ru/companies/spring_a

    #java #kotlin #spring #spring_boot #java_core #kotlin_multiplatform #kotlin_dsl

  34. [Перевод] Kotlin переходит к деструктурированию по именам

    В Kotlin деструктурирование выглядело так: val (name, age) = person . Но компилятор берет значения не по именам, а по позиции component1/component2 . Отсюда проблемы. Если поменяли порядок параметров в data class или сделали age вычисляемым свойством: то та же строка начинает доставать другое поле. Причем иногда код даже скомпилируется, но, конечно, смысл изменится: val (age, name) = person . И вот теперь Kotlin эксперементально переводит круглые скобки на деструктурирование по имени. Синтаксис будет такой: (val name, val age) = person . И порядок внутри скобок не важен. Переименование явно: (val years = age, val theName = name) = person . Позиционное же деструктурирование остается, но переезжает в квадратные скобки для Pair/Triple и коллекций: val [x, y] = point . Разбираемся полностью в новом переводе от команды Spring АйО .

    habr.com/ru/companies/spring_a

    #java #kotlin #spring #spring_boot #java_core #kotlin_multiplatform #kotlin_dsl

  35. Kafka, таксономии и удаление событий: как исключить обработку неактуальных сообщений

    В рамках задачи по обработке XBRL-таксономий возникло требование: если таксономия удалена до обработки событий расчёта кэша, эти события не должны приводить к созданию данных для уже неактуальной сущности. На первый взгляд кажется, что достаточно найти соответствующие сообщения и удалить их из Kafka topic. Но Kafka хранит данные как commit log, поэтому точечное удаление сообщений по версии таксономии или другому бизнес-признаку оказывается небезопасным. В статье рассмотрим, почему прямое удаление сообщений не подошло, какие варианты были рассмотрены и как в итоге был применён комбинированный подход: стабильный Kafka key, tombstone-сообщения, compact/delete policy и проверка состояния таксономии на стороне consumer. Разберём решение

    habr.com/ru/articles/1035526/

    #kafka #spring_boot #Spring_Kafka #java #микросервисы #tombstone_objects #Compacted_topic #log_compaction #consumer #идемпотентность

  36. Kafka, таксономии и удаление событий: как исключить обработку неактуальных сообщений

    В рамках задачи по обработке XBRL-таксономий возникло требование: если таксономия удалена до обработки событий расчёта кэша, эти события не должны приводить к созданию данных для уже неактуальной сущности. На первый взгляд кажется, что достаточно найти соответствующие сообщения и удалить их из Kafka topic. Но Kafka хранит данные как commit log, поэтому точечное удаление сообщений по версии таксономии или другому бизнес-признаку оказывается небезопасным. В статье рассмотрим, почему прямое удаление сообщений не подошло, какие варианты были рассмотрены и как в итоге был применён комбинированный подход: стабильный Kafka key, tombstone-сообщения, compact/delete policy и проверка состояния таксономии на стороне consumer. Разберём решение

    habr.com/ru/articles/1035526/

    #kafka #spring_boot #Spring_Kafka #java #микросервисы #tombstone_objects #Compacted_topic #log_compaction #consumer #идемпотентность

  37. Kafka, таксономии и удаление событий: как исключить обработку неактуальных сообщений

    В рамках задачи по обработке XBRL-таксономий возникло требование: если таксономия удалена до обработки событий расчёта кэша, эти события не должны приводить к созданию данных для уже неактуальной сущности. На первый взгляд кажется, что достаточно найти соответствующие сообщения и удалить их из Kafka topic. Но Kafka хранит данные как commit log, поэтому точечное удаление сообщений по версии таксономии или другому бизнес-признаку оказывается небезопасным. В статье рассмотрим, почему прямое удаление сообщений не подошло, какие варианты были рассмотрены и как в итоге был применён комбинированный подход: стабильный Kafka key, tombstone-сообщения, compact/delete policy и проверка состояния таксономии на стороне consumer. Разберём решение

    habr.com/ru/articles/1035526/

    #kafka #spring_boot #Spring_Kafka #java #микросервисы #tombstone_objects #Compacted_topic #log_compaction #consumer #идемпотентность

  38. Kafka, таксономии и удаление событий: как исключить обработку неактуальных сообщений

    В рамках задачи по обработке XBRL-таксономий возникло требование: если таксономия удалена до обработки событий расчёта кэша, эти события не должны приводить к созданию данных для уже неактуальной сущности. На первый взгляд кажется, что достаточно найти соответствующие сообщения и удалить их из Kafka topic. Но Kafka хранит данные как commit log, поэтому точечное удаление сообщений по версии таксономии или другому бизнес-признаку оказывается небезопасным. В статье рассмотрим, почему прямое удаление сообщений не подошло, какие варианты были рассмотрены и как в итоге был применён комбинированный подход: стабильный Kafka key, tombstone-сообщения, compact/delete policy и проверка состояния таксономии на стороне consumer. Разберём решение

    habr.com/ru/articles/1035526/

    #kafka #spring_boot #Spring_Kafka #java #микросервисы #tombstone_objects #Compacted_topic #log_compaction #consumer #идемпотентность

  39. Открытое ТЗ для пет-проекта: сервис поиска пропавших людей

    Долго думал, в каком формате это написать, в итоге решил по-простому - рассказать, что есть, и кому это может пригодиться. Мы с коллегой делали выпускной проект для курсов CloudJava и CloudJava K8S. Это техзадание на бэкенд распределенной системы - четыре микросервиса, Gateway, обвязка. Изначально оно было доступно только участникам курсов, теперь решили открыть бесплатно, без регистрации или “оставьте email”. Просто страница с текстом и тремя OpenAPI-спеками. Ссылки сразу, чтобы не листать: Описание проекта: javaops.ru/view/cloudjava3 Само ТЗ: javaops.ru/view/cloudjava3/res

    habr.com/ru/articles/1034426/

    #java #spring_boot #kafka #postgresql #пет_проект

  40. Открытое ТЗ для пет-проекта: сервис поиска пропавших людей

    Долго думал, в каком формате это написать, в итоге решил по-простому - рассказать, что есть, и кому это может пригодиться. Мы с коллегой делали выпускной проект для курсов CloudJava и CloudJava K8S. Это техзадание на бэкенд распределенной системы - четыре микросервиса, Gateway, обвязка. Изначально оно было доступно только участникам курсов, теперь решили открыть бесплатно, без регистрации или “оставьте email”. Просто страница с текстом и тремя OpenAPI-спеками. Ссылки сразу, чтобы не листать: Описание проекта: javaops.ru/view/cloudjava3 Само ТЗ: javaops.ru/view/cloudjava3/res

    habr.com/ru/articles/1034426/

    #java #spring_boot #kafka #postgresql #пет_проект

  41. Открытое ТЗ для пет-проекта: сервис поиска пропавших людей

    Долго думал, в каком формате это написать, в итоге решил по-простому - рассказать, что есть, и кому это может пригодиться. Мы с коллегой делали выпускной проект для курсов CloudJava и CloudJava K8S. Это техзадание на бэкенд распределенной системы - четыре микросервиса, Gateway, обвязка. Изначально оно было доступно только участникам курсов, теперь решили открыть бесплатно, без регистрации или “оставьте email”. Просто страница с текстом и тремя OpenAPI-спеками. Ссылки сразу, чтобы не листать: Описание проекта: javaops.ru/view/cloudjava3 Само ТЗ: javaops.ru/view/cloudjava3/res

    habr.com/ru/articles/1034426/

    #java #spring_boot #kafka #postgresql #пет_проект

  42. Открытое ТЗ для пет-проекта: сервис поиска пропавших людей

    Долго думал, в каком формате это написать, в итоге решил по-простому - рассказать, что есть, и кому это может пригодиться. Мы с коллегой делали выпускной проект для курсов CloudJava и CloudJava K8S. Это техзадание на бэкенд распределенной системы - четыре микросервиса, Gateway, обвязка. Изначально оно было доступно только участникам курсов, теперь решили открыть бесплатно, без регистрации или “оставьте email”. Просто страница с текстом и тремя OpenAPI-спеками. Ссылки сразу, чтобы не листать: Описание проекта: javaops.ru/view/cloudjava3 Само ТЗ: javaops.ru/view/cloudjava3/res

    habr.com/ru/articles/1034426/

    #java #spring_boot #kafka #postgresql #пет_проект

  43. [Перевод] Команда Spring о Spring Framework 7 и Spring Boot 4

    В новом переводе от команды Spring АйО рассмотрим выход Spring Boot 4 и Spring Framework 7. InfoQ взяли интервью у core команды Spring с целью узнать, куда движется самая популярная в Java экосистема. Spring Boot 4 модуляризировал автоконфигурацию. Теперь при запуске проверяется меньше классов в classpath, а uber-jar будет более компактным: будут подключаться только нужные модули. Параллельно Spring Boot 4 переходит на Jackson 3, но добавлен модуль совместимости с Jackson 2, потому что экосистема ещё догоняет. Spring Framework 7 тащит core resilience в ядро: RetryTemplate , @Retryable и @ConcurrencyLimit доступны без отдельной зависимости. @Retryable работает и с реактивными типами (через Retry из Project Reactor); для обычных вызовов используется RetryTemplate с политикой retry/backoff. @ConcurrencyLimit помогает ограничивать доступ к ресурсу, что особенно полезно с Virtual Threads.

    habr.com/ru/companies/spring_a

    #java #kotlin #spring #spring_boot #spring_framework #springboot #spring_data #ai #agents

  44. [Перевод] Команда Spring о Spring Framework 7 и Spring Boot 4

    В новом переводе от команды Spring АйО рассмотрим выход Spring Boot 4 и Spring Framework 7. InfoQ взяли интервью у core команды Spring с целью узнать, куда движется самая популярная в Java экосистема. Spring Boot 4 модуляризировал автоконфигурацию. Теперь при запуске проверяется меньше классов в classpath, а uber-jar будет более компактным: будут подключаться только нужные модули. Параллельно Spring Boot 4 переходит на Jackson 3, но добавлен модуль совместимости с Jackson 2, потому что экосистема ещё догоняет. Spring Framework 7 тащит core resilience в ядро: RetryTemplate , @Retryable и @ConcurrencyLimit доступны без отдельной зависимости. @Retryable работает и с реактивными типами (через Retry из Project Reactor); для обычных вызовов используется RetryTemplate с политикой retry/backoff. @ConcurrencyLimit помогает ограничивать доступ к ресурсу, что особенно полезно с Virtual Threads.

    habr.com/ru/companies/spring_a

    #java #kotlin #spring #spring_boot #spring_framework #springboot #spring_data #ai #agents

  45. [Перевод] Команда Spring о Spring Framework 7 и Spring Boot 4

    В новом переводе от команды Spring АйО рассмотрим выход Spring Boot 4 и Spring Framework 7. InfoQ взяли интервью у core команды Spring с целью узнать, куда движется самая популярная в Java экосистема. Spring Boot 4 модуляризировал автоконфигурацию. Теперь при запуске проверяется меньше классов в classpath, а uber-jar будет более компактным: будут подключаться только нужные модули. Параллельно Spring Boot 4 переходит на Jackson 3, но добавлен модуль совместимости с Jackson 2, потому что экосистема ещё догоняет. Spring Framework 7 тащит core resilience в ядро: RetryTemplate , @Retryable и @ConcurrencyLimit доступны без отдельной зависимости. @Retryable работает и с реактивными типами (через Retry из Project Reactor); для обычных вызовов используется RetryTemplate с политикой retry/backoff. @ConcurrencyLimit помогает ограничивать доступ к ресурсу, что особенно полезно с Virtual Threads.

    habr.com/ru/companies/spring_a

    #java #kotlin #spring #spring_boot #spring_framework #springboot #spring_data #ai #agents

  46. [Перевод] Команда Spring о Spring Framework 7 и Spring Boot 4

    В новом переводе от команды Spring АйО рассмотрим выход Spring Boot 4 и Spring Framework 7. InfoQ взяли интервью у core команды Spring с целью узнать, куда движется самая популярная в Java экосистема. Spring Boot 4 модуляризировал автоконфигурацию. Теперь при запуске проверяется меньше классов в classpath, а uber-jar будет более компактным: будут подключаться только нужные модули. Параллельно Spring Boot 4 переходит на Jackson 3, но добавлен модуль совместимости с Jackson 2, потому что экосистема ещё догоняет. Spring Framework 7 тащит core resilience в ядро: RetryTemplate , @Retryable и @ConcurrencyLimit доступны без отдельной зависимости. @Retryable работает и с реактивными типами (через Retry из Project Reactor); для обычных вызовов используется RetryTemplate с политикой retry/backoff. @ConcurrencyLimit помогает ограничивать доступ к ресурсу, что особенно полезно с Virtual Threads.

    habr.com/ru/companies/spring_a

    #java #kotlin #spring #spring_boot #spring_framework #springboot #spring_data #ai #agents

  47. Skills для AI-агентов: всё, что тебе нужно знать

    Добавляя новый Skill, мы ждем от агента простого результата: меньше ошибок, более стабильная работа и лучшее понимание библиотек и фреймворков. На практике же часто можно наблюдать: – один skill активируется почти всегда, даже когда не нужен – другой — не включается в момент, когда мы на него рассчитываем – третий — срабатывает «в паре» с соседними и они мешают друг другу В какой-то момент может показаться, что агент работает хаотично и явно хуже, и хочется выключить все skills и вернуться к первоначальному состоянию. Почему так происходит и что с этим можно сделать, разбираемся в статье.

    habr.com/ru/companies/haulmont

    #AIагенты #Spring_Boot #skills_для_AIагентов #Spring_Agent_Toolkit #активация_skills #YAML_frontmatter #prompt_engineering

  48. Skills для AI-агентов: всё, что тебе нужно знать

    Добавляя новый Skill, мы ждем от агента простого результата: меньше ошибок, более стабильная работа и лучшее понимание библиотек и фреймворков. На практике же часто можно наблюдать: – один skill активируется почти всегда, даже когда не нужен – другой — не включается в момент, когда мы на него рассчитываем – третий — срабатывает «в паре» с соседними и они мешают друг другу В какой-то момент может показаться, что агент работает хаотично и явно хуже, и хочется выключить все skills и вернуться к первоначальному состоянию. Почему так происходит и что с этим можно сделать, разбираемся в статье.

    habr.com/ru/companies/haulmont

    #AIагенты #Spring_Boot #skills_для_AIагентов #Spring_Agent_Toolkit #активация_skills #YAML_frontmatter #prompt_engineering

  49. Skills для AI-агентов: всё, что тебе нужно знать

    Добавляя новый Skill, мы ждем от агента простого результата: меньше ошибок, более стабильная работа и лучшее понимание библиотек и фреймворков. На практике же часто можно наблюдать: – один skill активируется почти всегда, даже когда не нужен – другой — не включается в момент, когда мы на него рассчитываем – третий — срабатывает «в паре» с соседними и они мешают друг другу В какой-то момент может показаться, что агент работает хаотично и явно хуже, и хочется выключить все skills и вернуться к первоначальному состоянию. Почему так происходит и что с этим можно сделать, разбираемся в статье.

    habr.com/ru/companies/haulmont

    #AIагенты #Spring_Boot #skills_для_AIагентов #Spring_Agent_Toolkit #активация_skills #YAML_frontmatter #prompt_engineering

  50. Skills для AI-агентов: всё, что тебе нужно знать

    Добавляя новый Skill, мы ждем от агента простого результата: меньше ошибок, более стабильная работа и лучшее понимание библиотек и фреймворков. На практике же часто можно наблюдать: – один skill активируется почти всегда, даже когда не нужен – другой — не включается в момент, когда мы на него рассчитываем – третий — срабатывает «в паре» с соседними и они мешают друг другу В какой-то момент может показаться, что агент работает хаотично и явно хуже, и хочется выключить все skills и вернуться к первоначальному состоянию. Почему так происходит и что с этим можно сделать, разбираемся в статье.

    habr.com/ru/companies/haulmont

    #AIагенты #Spring_Boot #skills_для_AIагентов #Spring_Agent_Toolkit #активация_skills #YAML_frontmatter #prompt_engineering