Обновить
128K+

Java *

Объектно-ориентированный язык программирования

232,74
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Динамическое создание Spring Bean в рантайме

Время на прочтение3 мин
Охват и читатели8.2K

Перевод подготовлен специально для будущих студентов курса "Разработчик на Spring Framework".

Эта статья о динамическом создании бинов за пять лет стала самой популярной в моем блоге (более 9300 просмотров). Пришло время ее обновить. Также я добавил пример на Github.

Читать далее

Сбор данных и отправка в Apache Kafka

Время на прочтение6 мин
Охват и читатели9.6K

Введение


Для анализа потоковых данных необходимы источники этих данных. Так же важна сама информация, которая предоставляется источниками. А источники с текстовой информацией, к примеру, еще и редки.


Из интересных источников можно выделить следующие: twitter, vk. Но эти источники подходят не под все задачи.


Есть источники с нужными данными, но эти источники не потоковые. Здесь можно привести следующее ссылки: public-apis.


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


Скачать данные и отправить в поток.


Для примера можно воспользоваться следующим источником: imdb.
Следует отметить, что imdb предоставляет данные самостоятельно. См. IMDb Datasets. Но можно принять, что данные собранные напрямую содержат более актуальную информацию.


Язык: Java 1.8.
Библиотеки: kafka 2.6.0, jsoup 1.13.1.

Читать дальше →

Обеспечение границ компонентов чистой архитектуры с помощью Spring Boot и ArchUnit

Время на прочтение11 мин
Охват и читатели4.6K

Когда мы создаем программное обеспечение, мы хотим создавать «-способности»: понятность, ремонтопригодность, расширяемость и - в тренде сейчас - декомпозицию (чтобы мы могли разложить монолит на микросервисы, если возникнет необходимость). Добавьте в этот список свою любимую «способность».

Большинство - возможно, даже все - из этих «возможностей» идут рука об руку с чистыми зависимостями между компонентами.

Если компонент зависит от всех других компонентов, мы не знаем, какие побочные эффекты будет иметь изменение одного компонента, что затрудняет поддержку кодовой базы и еще более затрудняет ее расширение и разложение.

Со временем границы компонентов в кодовой базе имеют тенденцию ухудшаться. Плохие зависимости закрадываются и усложняют работу с кодом. Это имеет всевозможные плохие последствия. В частности, разработка замедляется.

Это тем более важно, если мы работаем над монолитной кодовой базой, охватывающей множество различных областей бизнеса или «ограниченных контекстов», если использовать жаргон Domain-Driven Design.

Как мы можем защитить нашу кодовую базу от нежелательных зависимостей? С тщательным проектированием ограниченных контекстов и постоянным соблюдением границ компонентов. В этой статье показан набор практик, которые помогают в обоих случаях при работе со Spring Boot.

Читать далее

Обработка исключений в контроллерах Spring

Время на прочтение9 мин
Охват и читатели135K

image


Часто на практике возникает необходимость централизованной обработки исключений в рамках контроллера или даже всего приложения. В данной статье разберём основные возможности, которые предоставляет Spring Framework для решения этой задачи и на простых примерах посмотрим как всё работает. Кому интересна данная тема — добро пожаловать под кат!

Читать дальше →

Java 15 глазами программиста Scala

Время на прочтение10 мин
Охват и читатели6.9K

Время летит. Не успеваешь моргнуть глазом, а уже вышел очередной релиз Java. В соответствии с графиком (по релизу каждые полгода) комьюнити получило в свое распоряжение Java 15, судьба которой — стать фундаментом для Java 17 LTS (выйдет через год).

В Java постоянно вносятся улучшения, многие из которых были реализованы под влиянием других языков JVM и функционального программирования. Сюда можно отнести такие возможности, как лямбды, ограниченный вывод типов локальных переменных (тип var) и switch-выражения. Scala — особенно богатый источник идей, благодаря инновационному сочетанию в ней объектно-ориентированного и функционального программирования.

Предлагаю рассмотреть, как представленные в новом релизе Java 15 (пока в статусе превью финальной версии) возможности соотносятся с конструкциями в Scala. Мы сосредоточимся на особенностях языка, пропустим улучшения в JVM и доработку стандартной библиотеки. Кроме того, нужно отметить, что некоторые из описанных компонентов уже были доступны в более ранних версиях Java (в виде предварительной или бета-версии).

Читать далее

Финансовое latency critical приложение на Java и Akka

Время на прочтение19 мин
Охват и читатели8.4K

Всем привет! В своей статье я поделюсь опытом разработки одного из финансовых приложений на Java в ТехЦентре Дойче Банка, расскажу про стек технологий, который мы используем, и каких результатов достигаем

Читать далее

Релиз Apache Ignite 2.9.0 — что нового?

Время на прочтение7 мин
Охват и читатели2.8K
Apache Ignite – это высокопроизводительная распределенная база данных с открытым исходным кодом, предназначенная для хранения и распределенной обработки больших объемов данных в кластере узлов. Мы в Сбере активно его используем, и у нас есть команда, занимающаяся разработкой этого продукта. 23 октября 2020 года вышла новая версия Apache Ignite 2.9.0. Как менеджер данного релиза от лица всей команды разработчиков Apache Ignite хочу поделиться информацией об основных нововведениях.

  • Snapshots (Резервное копирование)
  • Трэйсинг
  • Новые возможности тонких клиентов
  • Режим работы кластера «Только чтение»
  • Запуск пользовательского кода в «песочнице»
  • Прозрачное шифрование данных: ротация мастер ключа
  • Инструменты для прерывания пользовательских задач и запросов
  • Кэширование на стороне платформы (.NET)
  • Подключение клиентских узлов к серверным через NAT

Читать дальше →

Модульное тестирование архитектуры Spring Boot проекта с помощью ArchUnit

Время на прочтение5 мин
Охват и читатели10K

При создании программного обеспечения команды разработчиков обычно определяют набор руководящих принципов и соглашений по разработке кода, которые считаются лучшими практиками.

Это методы, которые обычно документируются и доводятся до сведения всей команды разработчиков, которая их приняла. Однако во время разработки разработчики могут нарушить эти рекомендации, которые обнаруживаются во время ревью кода или с помощью инструментов проверки качества кода.

Поэтому важным аспектом является автоматизация этих директив в максимально возможной степени по всей архитектуре проекта, позволяющая оптимизировать проверки.

Мы можем реализовать эти рекомендации как проверяемые JUnit тесты с помощью ArchUnit. Это гарантирует, что сборка версии программного обеспечения будет прекращена в случае нарушения архитектуры.

Читать далее

Apache Kafka и тестирование с Kafka Server

Время на прочтение8 мин
Охват и читатели22K

Введение


Существуют различные способы для написания тестов с использованием Apache Kafka. К примеру, можно использовать TestContainers и EmbeddedKafka. Об этом можно почитать, к примеру, вот здесь: Подводные камни тестирования Kafka Streams. Но существует и вариант для написания тестов с использованием KafkaServer.

Читать дальше →

Что было раньше: код или документация? OpenApi (OAS 3.0) и проблемы кодогенерации на Java

Время на прочтение9 мин
Охват и читатели11K

Задача интеграции сервисов и различных систем является чуть ли не одной из основных проблем современного IT. На сегодняшний день самым популярным архитектурным стилем для проектирования распределенных систем является REST. Но, как известно, единого стандарта для RESTful сервисов нет, а у кажущейся простоты и свободы есть обратная сторона медали. Не менее важной является задача интеграции систем разными командами или даже компаниями, с которой приходит вопрос об актуальности документации на протяжении жизни всего проекта, и удобного способа передачи потребителю.

Эту проблему отчасти удалось решить при помощи спецификации OpenAPI (OAS 3.0)[1], но все равно часто встает вопрос о правильном применении и подводных камнях кодогенерации, например на языке Java. И можно ли полностью предоставить аналитикам написание функциональных требований, документации и моделей в yml форме для OpenAPI, а разработчикам предоставить возможность только написание бизнес-логики?

Читать далее

Тесты, деньги и техдолг (сказ из жизни одного Java-проекта)

Время на прочтение19 мин
Охват и читатели8.9K


Дорогой друг, эта статья отчасти о тестировании, а отчасти о деньгах и жизни. Я написал её после того, как в очередной раз пришлось рассказывать новому сотруднику команды о том, как мы пишем тесты, когда и почему мы это делаем. Теперь я просто буду давать на эту статью ссылку, чтобы не повторяться. Я выражаю свой личный взгляд и мнение, надеясь, что и тебе он тоже будет полезен.

Сказ мой о разработке на Java, при этом всё нижеизложенное справедливо и для других языков программирования. От смены языков люди и проблемы в тестировании не меняются.
Отказ от ответственности (aka disclaimer): все персонажи являются вымышленными, и любое совпадение с реально живущими или когда-либо жившими людьми случайно.
Читать дальше →

Внедрение рекомендаций по структуре кода с использованием ArchUnit

Время на прочтение5 мин
Охват и читатели3K

При создании программного обеспечения все мы, как команда, соглашаемся следовать набору рекомендаций, которые обычно считаются лучшими практиками. Но во время разработки разработчики могут нарушить эти правила по незнанию или нежеланию. Обычно мы полагаемся на ревью кода или инструменты проверки качества кода, такие как SonarQube , PMD и т.д. для проверки таких нарушений. Но некоторые из рекомендаций могут быть решениями, которые нельзя автоматизировать с помощью SonarQube, PMD и т.д.

Например, обычно я хочу следовать приведенным ниже рекомендациям для моих приложений на основе Java:

1. Следуйте трехуровневой структуре (уровни веб, сервис, репозиторий), где любой уровень может взаимодействовать только с непосредственным нижним уровнем, а нижний уровень не должен взаимодействовать с верхним уровнем. т.е. веб-уровень может взаимодействовать с уровнем сервиса, уровень сервиса может взаимодействовать с уровнем репозитория. Но уровень репозитория не может взаимодействовать с сервисным или веб-уровнем, сервисный уровень не может взаимодействовать с веб-уровнем.

2. Если приложение большое, мы могли бы захотеть следовать структуре Package-By-Feature, где только компоненты Web и Service являются public, а остальные компоненты должны быть package-private.

3. При использовании внедрения зависимостей Spring не используйте внедрение на основе поля и предпочитайте внедрение на основе конструктора.

Таким образом, может быть много правил, которым мы хотим следовать. Хорошая новость заключается в том, что мы можем проконтролировать выполнение этих рекомендаций с помощью JUnit тестов с использованием ArchUnit.

Читать далее

Архитектурные подходы к авторизации в серверных приложениях: Activity-Based Access Control Framework

Время на прочтение10 мин
Охват и читатели4.6K

Сегодня поговорим об секьюрити в web (да, наверное, и не только) приложениях. Прежде чем описывать подходы и фреймворки расскажу небольшую предысторию.


Предыстория


За много лет работы в IT приходилось сталкиваться с проектами в самых разных сферах. У каждого проекта были свои требования к безопасности. Если в части аутентификации все было более-менее одинаково с точки зрения требований, то способы реализации механизма авторизации получались довольно разными от проекта к проекту. Каждый раз авторизацию приходилось писать практически с нуля под конкретные цели проекта, разрабатывать архитектурное решение, потом дорабатывать с изменением требований, тестировать, и т.д. — все это обычный процесс, которого не избежать в разработке. С каждой реализацией очередного такого архитектурного подхода все больше складывалось ощущение, что можно придумать какой-то общий подход, который будет покрывать основные цели авторизации и который можно будет использовать повторно в других приложениях. В данной статье будет рассмотрен обобщенный архитектурный подход к авторизации на примере разработанного фреймворка.


Подходы к созданию фреймворка


Как обычно, прежде чем разрабатывать что-то новое нужно определиться с тем, какие проблемы будут решаться, чем фреймворк будет удобен и полезен и, возможно, уже есть готовое решение (об этом поговорим после).


Всем известны два стиля написания кода — императивный и декларативный. Императивный стиль описывает то, как получить результат, декларативный — что требуется получить в результате.

Читать дальше →

Ближайшие события

Переезд из Java в Kotlin: как забрать коллекции с собой

Время на прочтение12 мин
Охват и читатели20K
Меня зовут Борис Николаев, и в первой статье на Хабре хочу сравнить Java и Kotlin при работе с коллекциями. Она будет полезна всем, кто планирует перебираться в Kotlin и не хочет долго осваиваться.

В течение последних лет Kotlin становится всё более и более популярным. Многие начинают осваивать его, уже имея за плечами какой-то бэкграунд на Java, поэтому в данной статье мне хотелось бы привести сравнение кода на Java и на Kotlin. Чтобы наши примеры были более наглядными, рассмотрим различные операции над коллекциями, потому что без них не обходится ни одно приложение.

Читать дальше →

Улучшение Spring Mock-MVC тестов

Время на прочтение7 мин
Охват и читатели34K

Spring Mock-MVC может быть отличным способом протестировать Spring Boot REST API. Mock-MVC позволяет нам тестировать обработку запросов Spring-MVC без запуска реального сервера.

Я использовал тесты Mock-MVC в различных проектах, и по моему опыту они часто бывают довольно многословными. Это не должно быть плохо. Однако это часто приводит к копированию / вставке фрагментов кода в тестовые классы. В этом посте мы рассмотрим несколько способов очистки тестов Spring Mock-MVC.

Читать далее

Spring: Ускоряем запись в базу данных с помощью XML

Время на прочтение5 мин
Охват и читатели5.4K
Всем привет!

В этой статье пойдет речь о том как ускорить запись большого объема информации в реляционную базу данных для приложений, написанных с использованием Spring Boot. При записи большого количества строк за раз Hibernate вставляет их по одному, что приводит к существенному ожиданию, если строк много. Рассмотрим кейс как это обойти.
Читать дальше →

Пример развертывания Spring Boot-приложения в Kubernetes

Время на прочтение3 мин
Охват и читатели16K

Перевод статьи подготовлен специально для студентов курса «Разработчик на Spring Framework».


Давайте создадим простейшее Spring Boot-приложение, которое будет запускаться в кластере Kubernetes.



Читать дальше →

Экзамен 1z0-819 Oracle Certified Professional: Java 11 Developer — заметки о сдаче

Время на прочтение5 мин
Охват и читатели26K


В начале октября Oracle упростил получение сертификации по Java — вместо двух экзаменов теперь нужно сдать один, при том что цена за экзамен не изменилась. Кому интересен уровень задач и больше подробностей про экзамен прошу под кат — опишу почему решил сдать, как готовился, какие вопросы были и собственно какие выводы сделал.
Читать дальше →

Apache Kafka как основа для велосипедостроения. Николай Сивко (okmeter.io)

Время на прочтение22 мин
Охват и читатели11K


Рано или поздно в нагруженном проекте возникает потребность в какой-то специализированной базе данных, кэше или ином хранилище. Причина такой потребности, как правило, погоня за производительностью, низким временем отклика или эффективностью хранения данных.


В своем докладе я расскажу о нашем опыте разработки и эксплуатации специализированной timeseries БД, в основе которой лежит Apache Kafka.

Кластеризация и классификация больших Текстовых данных с помощью машинного обучения на Java. Статья #1 — Теория

Время на прочтение19 мин
Охват и читатели21K
image

Данная статья будет состоять из 3 частей (Теория/Методы и алгоритмы для решение задач/Разработка и реализация на Java) для описания полной картины. Первая статья будет включать только теорию, чтобы подготовить умы читателей.

Цель статьи:

  • Частичная или полная автоматизация задачи кластеризации и классификации больших данных, а именно текстовых данных.
  • Применение алгоритмов машинного обучение “без учителя” (кластеризация) и “с учителем” (классификация).
  • Анализ текущих решений задач.

Задачки, которые будут рассматриваться в целом:

  1. Разработка и применение алгоритмов и методов обработки естественного языка.
  2. Разработка и применение методов кластеризации для определения кластерных групп входных документов.
  3. Применение методов классификации для определения предмета каждых кластерных групп.
  4. Разработка веб-интерфейса на основе Java Vaadin

Гипотезы, которые я вывел из задачки и при обучении теории:

  • Классификация кластерных групп определяет абстрактные и более ценные скрытые знания, игнорируя шумы, чем классификация отдельных объектов.
  • Точность кластеризации прямо пропорциональна количеству кластерных групп и обратно пропорциональна количеству объектов в одной кластерной группе.

Забегая вперед, кому интересен сам алгоритм, вот обзор.

Алгоритм программного обеспечение для машинного обучения состоит из 3 основных частей:

  1. Обработка естественного языка.
    1. токенизация;
    2. лемматизация;
    3. стоп-листинг;
    4. частота слов;

  2. Методы кластеризации.
    TF-IDF ;
    SVD;
    нахождение кластерных групп;
  3. Методы классификации – Aylien API.

Итак, начнем теорию.
Читать дальше →