Обновить
512K+

Java *

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

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

Как программист настроил автоматическое развертывание бекенда с базой данных

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

Всем привет, хабровчане и гости сайта

Сегодня решил рассказать о своем опыте, как я при помощи docker-compose и bash скрипта настроил развертывание бекенд приложения с базой данных.

Какая была идея? Хотелось при помощи одной команды в терминале разворачивать Java приложение с базой данных так, чтобы можно было передать все необходимые переменные в момент запуска и нигде не хранить их.
Так, чтобы можно было развернуть новую версию приложения даже с телефона, просто заранее заготовив необходимую команду.

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

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

Дело было так...

Выкуси, Telegram Premium — бот-конвертер голосовых сообщений для обхода ограничений (Java, Spring, вебхуки, ffmpeg)

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

Это третья статья в моей серии "для самых маленьких" - первая была посвящена "классическому" Telegram-боту, наследуемому от TelegramLongPollingBot, вторая - боту на вебхуках на Spring с блекджеком и ш БД Redis и клавиатурами.

Для кого написано

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

Я пытаюсь писать как для себя, а не сразу для умных — надеюсь, кому-нибудь это поможет быстрее въехать в тему.

Предыстория

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

Большинство преимуществ Telegram Premium не вызывают никаких вопросов, но запрет на отправку себе голосовых сообщений - это низко, Telegram.

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

На дно!

Java и низкая задержка

Время на прочтение8 мин
Охват и читатели9.3K
Источник

Я уже сбился со счёта, сколько раз мне говорили, что Java — неподходящий язык для разработки приложений, основным требованием к которым является высокая производительность. Обычно первым делом я прошу уточнить, что подразумевается под словом «производительность», поскольку две самые популярные метрики — пропускная способность и задержка — иногда конфликтуют друг с другом, а способы оптимизации одной из них существенно ухудшают вторую.

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

Конструктор триггеров в Telegram. Или как мы сделали простейшего, но полезного бота

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

Привет! Меня зовут Боровков Евгений и я предприниматель. В этой статье я расскажу про свой pet-проект. Или как я решил проблему вечного поиска информации прямо в уютном Телеграммчике.

Читать далее

Как я делал serverless поиск для мейлинг листов OpenJDK

Время на прочтение5 мин
Охват и читатели1K
Совсем недавно мне захотелось поискать какую-то информацию в amber-dev мейлинг листе. Оказывается, что никакого встроенного поиска тут нет. Нужно либо пользоваться гуглом и использовать site: оператор, либо использовать поиск почтового клиента. В целом, оба варианта — рабочие, но мне захотелось сделать еще одну опцию, попутно немного поиграв с WebAssembly.

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

Динамический компаратор для объектов с помощью ComparatorChain

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

И еще немного о сортировке! Рассмотрен вариант генерации компаратора для некоторой несложной сущности на основе самого класса и параметров многоступенчатой сортировки. Плюс данного подхода заключается в получении компаратора в runtime, при отсутствии необходимости менять код при изменении сортируемой сущности и параметров сортировки.

Читать далее

Настраиваем память JVM-приложения в Kubernetes

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

Друзья, всем привет! Как известно, в Kubernetes у каждого pod’а есть ограничение на  использование памяти (limits.memory), и, как показывает опыт, далеко не всегда очевидно, как JVM-приложение интерпретирует эту настройку, что порой может приводить к OOMKill.

 

Читать далее

Онлайн-фестиваль TechTrain — для тех, кто уехал, и тех, кто остался

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

В эти турбулентные времена многие читатели Хабра меняют местоположение. И части из них сейчас не до докладов про технологии, даже если речь о бесплатном онлайн-мероприятии в субботу.

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

Он предшествует нашей осенней серии конференций по разным направлениям (Java, JS, DevOps и так далее). И в его программе по одному докладу от этих конференций: один о видеотехнологиях, другой о мобильной разработке, третий вообще про генерацию картинок нейросетями.

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

К программе

Агрегаторы

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

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

Читать далее

История одного бага

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

Всё началось с баг репорта от одного из пользователей нашего фрэймворка JDI Light - NullPointerException при WebPage.open(), а точнее WindowsManager.getWindows()

Максимально странное падение до 30% тестов разом с одной ошибкой. Причём либо падает сразу много, либо - не падает вообще.

Мы в JDI очень трепетно относимся к баг репортам пользователей, особенно такого фантастического качества - с подробным описанием и вот этим всем.

Приступить к расследованию

Безопасный Spring REST с применением Spring Security и OAuth2

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

В этой статье мы продемонстрируем пример настройки Spring Security + OAuth2  для защиты конечных точек REST API на фреймворке Spring Boot. Клиенты и учетные данные пользователей будут храниться в реляционной базе данных (для баз данных H2 и PostgreSQL подготовлены примеры конфигураций).

Читать далее

Java из Python (Kivy) и обратно на Android

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

Продолжение статьи C/C++ из Python (ctypes) на Android. Теперь поговорим о том как использовать Java из Python, ведь для android это родной язык и почти все работающие библиотеки и нужные вещи написаны на нем. Научимся создавать классы, вызывать методы, возвращать результат и дергать callback-и. На Linux аналогично работает.

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

Как хранить сеть дорог в БД для построения маршрута?

Уровень сложностиСложный
Время на прочтение21 мин
Охват и читатели24K

Японцы уже в 2018 году научили немецкий GraphHopper строить маршруты по дорогам хранящимся в PostgreSQL.

Как кастомизировать источник данных, и сохранять новые дороги в таблицу правильно?

Надо всего лишь...

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

Event sourcing+CQRS с помощью Spring

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

Пришел как-то на новый проект, а там Event sourcing+CQRS. Посмотре, как эта архитектура устроена тут и тут и очень вдохновился. На проекте были джава и спрингом, но архитектура настраивалась полностью вручную.

Как мы знаем, аннотации это хорошо. Давайте попробуем собрать handler’ы и applier’ы с помощью кастомных аннотаций.

Читать далее

Как мы внедряли Allure TestOps в стриминговом сервисе

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

Всем привет! Меня зовут Иван Чечиков, я QA lead в МТС Digital, работаю над проектом стримингового сервиса WASD.TV. В этой статье я поделюсь опытом о том, как мы внедряли систему управления тестированием (TMS) Allure TestOps в наш проект и что из этого получилось. А еще отмечу подводные камни, с которыми столкнулись и обозначу пути их обхода. Статья может быть полезна тем, кто задумываются о переходе на данную TMS с других готовых решений, таких так Zephyr, TestRail, Test IT.

Подробности – под катом.

Читать далее

Вышла Java 19

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

Вышла общедоступная версия Java 19. В этот релиз попало более двух тысяч закрытых задач и 7 JEP'ов. Release Notes можно посмотреть здесь. Изменения API – здесь.


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

Пять задач, которые приходится решать при трудоустройстве начинающим Java-разработчикам в 2022 году

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

Хабр, привет! Меня зовут Даниил Пилипенко, я программный директор факультета backend-разработки направления «Программирование» Skillbox, директор центра подбора IT-специалистов SymbioWay. Сегодня разберём практические задачи, с которыми могут столкнуться Java-разработчики junior-уровня на собеседовании. Такого рода задачи мы часто видим на собеседованиях наших клиентов и коллег, а также сами даём соискателям.

Читать далее

Как подружить Svelte и Spring Boot

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

Эта статья рассчитана на Spring Boot разработчиков, желающих пощупать мир современного фронтенда. Я потратил некоторое количество времени на поиск наиболее приличного фреймворка и мой выбор пал на Svelte. Почему именно он, а не React или Vue? Лучше всего на этот вопрос ответит главная страница фреймворка, а я выделю главные его особенности.

Читать далее

Миллиард абитуриентов МИРЭА 2

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

В прошлой работе автор представил описание архитектуры платформы приемной коммисии для обработки миллиарда абитуриентов за один день. В этой работе автор предлагает разработать, используя Spring + JDBCTemplate и Kafka микросервисы для предложенной архитектуры.

Добро пожаловать в АД

FAQ по var в Java

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

Локальные переменные — это "рабочие лошадки" Java. Они используются для хранения промежуточных результатов вычислений. И, в отличие от полей, объявляются, инициализируются и используются в одном блоке. Для понимания кода часто более важны имя и инициализатор, чем тип локальной переменной.

Читать далее