Ответы пользователя по тегу Java
  • При считывании отображаются пустые поля?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Ну, во-первых, вы можете использовать try-with-resources вместо try-catch.
    Во-вторых, стрим гораздо лучше закрывать в finally блоке, если решили все же использовать try catch
    В-третьих, лучше писать в логи те эксепшены FileNotFoundException и IOException
    В-четвертых, вы закрываете ObjectInputStream, но не FileInputStream (а надо бы)
    Теперь, по существу - предположу, что вы Contact contact = new Contact("", "", "", 0);
    Можно гораздо лучше написать данный участок кода. Например, считывать данные и если null, то используя класс Optional создавать новый пустой объект (или не создавать вовсе).
    Было бы неплохо, выложить содержимое вашего файла Contact.txt, чтобы иметь представление о том, как именно хранятся данные в файле. Как вы его читаете. Нужно ли их как-то разделять и т.д.
    Ответ написан
    Комментировать
  • Как почитать строку в java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    На самом деле можно по-разному реализовать ваш функционал.
    Все зависит от того, насколько глубоко вы хотите копнуть...
    Если вы только изучаете java, а судя по методу main, это так и есть, то коллега вам уже подсказал.
    А так можно например, глянуть в сторону постфиксных операторов https://stackoverflow.com/questions/12269191/postf...
    Или например, реализовать паттерн интерпретатор для реализации функционала калькулятора и т.д. В общем, вариантов куча
    Ответ написан
    1 комментарий
  • Если в API ArrayList поддерживает сериализацию, нужно в самом классе ставить implements Serializable?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Элементы, которые должны быть сериализованы должны имплементировать интерфейс Serializable
    Если вы пишете кастомную реализацию интерфейса list и т.д., то нет необходимости имплементировать интерфейс Serializable

    Что касается DAO, как отметил коллега, он реализуется иным способом и обычно, предоставляет методы для работы с БД.
    Ответ написан
    Комментировать
  • Как ускорить процесс получения большого объема данных?

    azerphoenix
    @azerphoenix Автор вопроса, куратор тега Java
    Java Software Engineer
    Проблему решил путем применения Spring Batch.
    Ответ написан
    Комментировать
  • Как вернуть maven в intellij idea?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Maven может поставляться вместе с программой в виде одноименного плагина или же может быть установлен отдельно, но при этом необходимо будет в настройках указать путь расположения к нему.
    Если решите установить отдельно, то рекомендую использовать sdkman. Он как раз поддерживается на устройствах мак и линукс. Ну и обновите плагин или сам софт полностью
    Ответ написан
    Комментировать
  • Почему не выводит метод say?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    public String say(String something) {
            return "Ты чё не знаешь, что рыбы не разговаривают?";
        }


    Fish myFish = new Fish();
            myFish.say("Привет");


    Обратите внимание, что метод возвращает переданное значение через return в место вызова метода. Вот, только вы ее не выводите в консоль и не присваиваете к переменной

    попробуйте
    Fish myFish = new Fish();
    String fishSay = myFish.say("Привет");
    System.out.println(fishSay);
    Ответ написан
    Комментировать
  • Есть ли инструменты для отслеживание памяти для Spring?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Доброго времени суток.
    Есть много разных инструментов, в том числе, как коллега подсказал visualVM.
    Если используете İntellij İDEA, то в него встроены некоторые инструменты для профайлинга.
    Если вам необходимо провести удаленный профайлинг, то можете еще воспользоваться возможностями удаленного дебага (Intellij IDEA -> Remote JVM debug)
    Ответ написан
    Комментировать
  • Зачем нужен WebFlux?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Чем хорош вебфлакс... асинхронностью.
    По своему опыту скажу, что он имеет преимущества в плане отзывчивости перед вебом.

    Пока не вижу кейсов, при которых не хватало SpringBoot, либо MicroProfile-фреймворков.

    Уж поверьте, когда понадобится, тогда увидите нужные кейсы.

    Мне например, приходилось разрабатывать приложение, который на вход принимает огромное количество точек (более 1000), строит маршруты и возвращает инструкции. Тав вот, асинхронно (flux) я возвращал данные по мере готовности. А если вы работаете с БД, то можете вместо jdbc подключить r2dbc.
    Ответ написан
    Комментировать
  • Как спроектировать отправку данных по консюмерам?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Есть API, Который принимает на вход ID платежа. Далее кроном ходит бд и вытягивает по ID детали платежа
    (сумма, реквизит и т.п) и присваивается статус: NEW.

    Попробуйте фреймворк spring quartz. Или spring batch. С их помощью можно реализовать то, что вы хотите
    Ответ написан
    Комментировать
  • Подскажете по архитектуре "мультисервисного" приложения?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Приложение будет предоставлять несколько WEB-сервисов, за каждый будет отвечать отдельный микросервис :) Но все они будут обращаться к одной базе данных.

    Может быть вам нужны не микросервисы, а distributed monolith? Ну и реализовать паттерн shared database access

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

    Тут можно и про SAGA задуматься.

    Но допустим, у меня БД на 1000 таблиц (плюс ещё таблицы взаимосвязаны что порождает вложенные Java-объекты). Это значит, мне надо сделать 1000 репозиториев, в каждом Х методов (получение по ID, получение по значению поля, одного объекта, коллекции...). И ещё 1000*Х методов в контроллерах....

    Честно, не уловил сути между количеством таблиц в БД и количеством репозиториев. Но если что можно же монорепо сделать.

    Думаю, вам не нужны микросервисы. Вам понадобится monolith, ну или максимумdistributed monolith.
    Много чего можно вынести в отдельные модули. Например, создать модуль persistence и вынести DAO туда
    Ответ написан
    2 комментария
  • Где есть приватный maven/gradle репозиторий?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Вы можете поднять Nexus репозиторий и использовать сколько угодно
    https://habr.com/ru/post/473358/
    https://www.sonatype.com/products/nexus-repository
    Ответ написан
    Комментировать
  • Как отобразить картинку на сайте из MySQL используя Spring?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день
    Вам необходимо byte{} перевести в base64.

    Чтобы получить массив байтов -
    String image = "this is base 64 image";
    byte[] photoByteArr = Base64.getDecoder().decode(String image);

    Чтобы получить base64
    String image = Base64.getEncoder().encodeToString(photo.getImage())

    А дальше гляньте, как вставить картинку в base64 - https://stackoverflow.com/questions/8499633/how-to...
    Ответ написан
    1 комментарий
  • Где выучить Spring Framework?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Вдобавок к тому, что указал коллега - https://www.youtube.com/watch?v=5ePo08sqcpk&list=P...
    Ответ написан
    2 комментария
  • В каком случае целесообразно изучать Java если ты php разработчик микросервисов?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Сам когда-то перешел из рнр разработки в Java и скажу, что очень этому рад.
    Вряд ли при переходе с рнр на джава вы начнете, как джун. Некоторые мои знакомые перешли из джава в с шарп и сохранили свои позиции миддла.
    Так что, если нравится язык, то можете смело переходить.
    Ответ написан
    2 комментария
  • Как принимать аргумент с командной строки во время работы приложения?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Как вариант, можете использовать JCommander
    Ответ написан
    Комментировать
  • Как реализовать фильтр данных по критерию?

    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
    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 комментария