• Как реализовать фильтр данных по критерию?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Конечно же есть... По факту вам нужно реализовать поиск.
    Если нужна готовая либа. то вот:
    https://github.com/tkaczmarzyk/specification-arg-r...

    Если хотите обойтись без либы, то расширьте репозиторий интерфейсом.
    JpaSpecificationExecutor<Book>
    А дальше можете передавать туда нужные спецификации (Specification)
    https://www.baeldung.com/rest-api-search-language-...
    Ответ написан
    Комментировать
  • Какой алгоритм можно использовать для оптимального распределения задач?

    azerphoenix
    @azerphoenix Автор вопроса
    Java Software Engineer
    В качестве решения данной задачи была выбрана библиотека OptaPlanner.
    https://www.optaplanner.org/
    Позволяет решать проблемы оптимизации
    Ответ написан
    Комментировать
  • Как правильно использовать данный репозиторий?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    С учетом того, что этой либы нет в Maven Central и др. репозиториях, то вам нужно скачать проект себе. Сбилдить его при помощи Gradle. Созданный jar добавить в виде dependency.
    Ответ написан
    1 комментарий
  • Could not commit JPA transaction. Как исправить?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Доброго времени суток!
    1)
    ConstraintViolationException: Validation failed for classes

    Судя по всему у вас есть некий constraint, который был нарушен и потому объект не был сохранен.
    Попробуйте подебажить этот момент: Скорее всего проблема тут.
    @Getter
        @Setter
        @ElementCollection(targetClass = Role.class, fetch = FetchType.EAGER)
        @CollectionTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"))
        @Enumerated(EnumType.STRING)
        private Set<Role> roles;


    Некоторые рекомендации не связанные с вопросом:
    2) рекомендую ознакомитсья с паттерном DTO. Вам нужно принять DTO, замаппить его в Entity. Это более корректный способ.
    3) нет смысла дублировать @Getter @Setter, если эти аннотации стоят над каждым полем. Попробуйте перенести его на уровен класса.
    4)
    Ответ написан
    Комментировать
  • Как писать микросервсиы на Java + Docker?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Как отметил коллега, каждый микросервис может быть написан на разных языках и это нормальная практика.
    Теперь, что касается Java. Ну во-первых, касаемо используемых фреймворков. Удобонее писать микросервисы на Spring (Spring Boot) или Quarkus.
    Приложения могут быть запущены в Tomcat, Jetty, Netty, GlassFish и т.д.
    По умолчанию в Spring Boot есть embedded зависимость для самозапускающихся приложений. Например, embedded tomcat.

    В Node.js сервисы обычно запускают в Docker, я слышал что в Java для этого используют Tomcat, в чем разница между ними? (или это вообще разные вещи?)

    Это разные вещи. Приложения написанные в Java тоже можно контейнезировать и запустить внутри докера.

    В Node.js для запуска сервера обычно используют express.js, а что для этого используется в Java? (Servlet, Spring или что-то еще?)

    Сервлет, есть сервлет. Spring это фреймворк. А для запуска используется то, что я указал выше.

    Допустим я сделал сервер на Servlet, как запускать это в docker контейнере?

    https://sematext.com/blog/docker-java-tutorial/

    Если я запущу 10 Java сервисов в отдельных Docker контейнерах, в каждом из них будет отдельный экземпляр JRE\JDK?

    В этом и есть суть докер контейнера и микросервисов. Каждый микросервис является автономным модулем. Каждый контенер является полноценной системой.

    Преимущество Java мискросервисов перед Node.js? (или наоборот)

    Не хочу холиварить. У каждого языка и фреймворка свои преимущества. Потому, микросервисы могут быть написаны на разных языках и не только на ноде, но и на Rust, Kotlin, Go и т.д.
    https://runnable.com/docker/java/dockerize-your-ja...
    Ответ написан
    2 комментария
  • Как реализовать фоновую авторизацию?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Ну для этого обычно используют 2 токена.
    1-й access token, время жизни которого меньше. Например, 30 мин.
    2-й refresh token, время жизни которого больше. Например, 12 ч.
    Когда исстекается срок действия access token, то нужно отправить запрос с refresh token и получить новый access token
    Ответ написан
    Комментировать
  • Почему liquibase не работает в docker?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Вариантов может быть несколько.
    Например, вы указали некорректный путь до БД в конфигах liquibase. Как вариант, вы могли указать localhost вместо названия самого докер контейнера в jdbc url или еще что...
    Ответ написан
    Комментировать
  • Как правильнее сравнить на практике языки программирования, чтобы понять, какой изучать?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Мой совет следующий: в первую очередь выберите направление, в котором вы хотите развиваться.
    Если вас интересует фронт-энд, то вряд ли C# & Java вам в этом помогут.
    С другой стороны, противореча своей первой мысли, скажу что вам нужно выбрать язык со строгой типизацией и с поддержкой ООП. Например, C#, Java, Kotlin. Потому, что изучив основы работы с ООП и строгую типизацию вы сможете с легкостью изучить другие языки. Т.е. отталкиваться стоит от этих аспектов.
    Не буду начинать холливар про c# & java, так как оба языка хорошие. Оба языка "очень хорошо себя чувствуют".
    Что касается направлений, то:
    Enterprise - C#, Java, Scala, Kotlin
    Web backend (e-commerce, erp) - Python, ruby, javascript, php, typescript
    front-end - javascript, typescript
    data science - python
    Ответ написан
    4 комментария
  • Как снизить нагрузку на API?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Клиент отправляет файл в апи и на стороне создаётся задача, далее клиенту передается идентификатор задачи по которому он будет время от времени спрашивает прогресс обработки.

    Посмотрите в сторону:
    - Spring Quartz
    - Spring Batch
    - Spring Webflux
    - DeferredResult

    Дальше профилирование, возможно вертикальное расширение.
    Ответ написан
    Комментировать
  • Как обновить большие данные в Hibernate?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Добрый день.
    Читать все данные из БД разом в List<Foo> или любую другую коллекцию не самая лучшая идея.
    Соответственно, можно вместо коллекций использовать стримы.
    Т.е. Получить Stream<Foo>

    Пример,
    FooRepository {
    
    @QueryHints(value = {
                @QueryHint(name = HINT_FETCH_SIZE, value = "1000"),
                @QueryHint(name = HINT_CACHEABLE, value = "false"),
                @QueryHint(name = READ_ONLY, value = "true")
        })
        @Query(value = "SELECT DISTINCT f FROM Foo f")
        @Transactional(readOnly = true)
        Stream<Foo> findFoos();
    
    }


    Ну а дальше остается распараллелить стрим при помощи parallelStream()
    И произвести необходимые операции. Например, вызвать метод map() и в конце сохранить...

    Если нужно данную операцию производить периодически, то к методу, который будет производить операцию, добавьте @Async и используйте @Scheduled (или возможности Spring Batch, Spring Quartz)

    Для более подробного ответа нужно больше информации.
    Ответ написан
  • Как правильно передать данные между микросервисами spring?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Если это учебный проект, то можете поиграться с amqp для начала. Возьмите например, rabbitMQ и покопайтесь в нем. Можете глянуть на оркестрацию микросервисов. Обратите внимание на паттерн SAGA
    https://www.baeldung.com/cs/saga-pattern-microservices
    https://www.vinsguru.com/orchestration-saga-patter...
    Ответ написан
  • Eclipse какой есть плагин для автозаполнения java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Может быть вам нужно подключить какой-нибудь плагин.
    Например,
    https://www.tabnine.com/install/eclipse
    или
    https://github.com/features/copilot
    https://github.com/masecla22/eclipse-github-copilo...
    Ответ написан
  • Простая оркестрация контейнеров?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    Могу рассказать, как это решается на Java + Spring.
    Конфигурацию микросервисов можно сделать централизованной. Для этого необходимо развернуть amqp сервис. Например, rabbitmq.
    Конфигурация при этом выносится в отдельный репозиторий и хранится там.
    Далее каждый из микросервисов при старте знает, что ему нужно обратиться к микросервису, который отвечает за конфигурации. Также они подписываются на событие к rabbitmq.
    Когда в гит репозиторий пушатся конфиги, то конфиг сервер кидает их в rabbitmq, а они в свою очередь забираются микросервисом и проводится динамическое обновление конфигов.
    Скорее всего, на python есть некий похожий сервис для этих целей.
    Ответ написан
  • Как проверить в регулярном выражение ip адрес на java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Пробовали метод из зависимости apache.commons.utility?
    https://commons.apache.org/proper/commons-validato...
    Ответ написан
  • Какая будет связь между классом и интерфейсом на UML языке?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    На UML отображен пример того, как абстрактный класс реализует интерфейс. И как класс расширяет абстрактный класс.
    62ce7fb237827268009814.png
    В первом случае используется realization, во втором генерализация.
    Кстати, очень удобная программа Visual Paradigm Community для проектирования
    Ответ написан
    Комментировать
  • TypeScript делает из JS СИ подобный язык?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    TypeScript ничего с js не делает. TypeScript является языком со статической типизацией (типы задаются в начале, как в Java || C#).
    Другое дело, что во фронте ts код транспилируют в js код. После транспайлинга в js нет никакой типизации и т.д.
    Php является C подобным языком, также как и C#, Java, C++, PHP и др. Например, пайтон не является Си подобным языком

    ему не нужны расширения как TS

    Что вы подразумеваете под расширениями? TS, также как и другие языки использует либы, которые расширяют функционал, если об этом речь
    Ответ написан
    7 комментариев
  • Как лучше хранить данные в MySQL для проекта Java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Как вариант вы можете хранить данные в виде json. Есть либа для hibernate - hibernate types

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

    Так не храните в конкретном классе. Создайте 1 общий родительский класс с общими полями. А также необходимые дочерние классы (по 1 на каждый шаблон).
    А далее используйте https://www.baeldung.com/hibernate-inheritance

    Краткий принцип работы: происходит добавления емейла в очередь в БД, через некоторое время специальный сервис отправляет это сообщение.

    Я так понимаю, что это некий amqp сервис (rabbitmq, kafka и др), который слушает event и пр наличии отправляет майл?
    Ответ написан
    Комментировать
  • Пишут ли приложения с нуля на Java в 2022?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Да, пишут. На Java есть и легаси и это показатель того, что язык не умер и умрет далеко не скоро.
    К тому же зная java вы можете в любое время переключиться на другие jvm языки - scala, kotlin, closure и т.д.
    Ответ написан
    Комментировать
  • Проблема с подключением PostgreSQL к Java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Вопрос 1 - где установлена БД PostgresSQL.
    Я так понимаю, что вы хотите подключиться к удаленной БД из моб. телефона? Если да, то попробуйте для начала проверить соединение без android. Например, на чистом Java

    Вопрос 2 - насколько корректно указаны конфиги? Например, номер порта 5432

    String url = "jdbc:postgres://тут правильный url";
        String user = "юзер правильно указан";
        String password = "пароль тоже правильно указан";


    Вообще скажу, что не очень хорошая практика делать приложение, которое коннектится к БД напрямую из приложения. Обычно, для этого пишут API (rest сервис)

    Также рекомендую использовать ORM и try with resources
    Ответ написан
    2 комментария
  • Почему докер не запускается с первого раза?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    Вам скорее всего необходим rootless режим.
    https://docs.docker.com/engine/security/rootless/
    Ответ написан
    Комментировать