• Почему не создается файл логирования из артифакта?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Релизная сборка (jar/war/ear) может отличаться по составу файлов от того что видит IDE. Может конфиг собрался не туда.

    Сделай
    <configuration debug="true">
    и процесс инициализации Logback станет более подробным и смотри что он напишет.
    Ответ написан
    6 комментариев
  • Почему пропускатеся return в одном из методов Enum-класса?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Предположительно идет на вход не та кодировка. Попробуй заменить на "male" / "female" и все будет ОК
    Ответ написан
    Комментировать
  • Есть сервера, которые стоит написать именно на Java, а не на Node?

    @Everything_is_bad
    что для REST серверов лучше Node не найти
    это твой главный неправильный вывод, лучший будет тот, который написан на технологии, которую лучше всего знает исполнитель.

    Например стриминговый сервер или сервер для чата, он же относится к разряду типичных запрос/ответ
    еще одна большая ошибка, вообще всё смешал в кучу, "стриминговый" это больше про максимальный pull c сервера, "чата" это про полноценный обмен в обе стороны, а "запрос/ответ" это про базовый http и он для этих обоих случаев, очень невыгодная стратегия, поэтому для них в http написаны свои частные протоколы, например, websocket для нормальной реализации чатов.
    Ответ написан
    5 комментариев
  • Разница между Callable и DeferredResult?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Зачем нужен чат-гпт, когда есть документация?

    DeferredResult provides an alternative to using a Callable for asynchronous request processing. While a Callable is executed concurrently on behalf of the application, with a DeferredResult the application can produce the result from a thread of its choice.
    Subclasses can extend this class to easily associate additional data or behavior with the DeferredResult. For example, one might want to associate the user used to create the DeferredResult by extending the class and adding an additional property for the user. In this way, the user could easily be accessed later without the need to use a data structure to do the mapping.
    An example of associating additional behavior to this class might be realized by extending the class to implement an additional interface. For example, one might want to implement Comparable so that when the DeferredResult is added to a PriorityQueue it is handled in the correct order.


    По факту заметил, что с DiferredRestult могу указывать сам пул потоков, а с Callable нет.

    Грубо говоря, да, разница в этом.
    Ответ написан
    Комментировать
  • Как остановить поток?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Поток завершается только тогда, когда прекращает выполняться код в нём. Поэтому извне остановить потоки нельзя, можно только через волатильную переменную или какой-нибудь примитив синхронизации передать сигнал о том, что выполнение надо прекратить, а в коде потока эту переменную постоянно проверять.
    Ответ написан
    Комментировать
  • Почему в semaphore методы acquaire() и tryAcquire() захватывают блокировку по разному?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    А что тут не понятно?
    1. Все потоки быстро запустились, вызвали tryAcquire и, т.к. он не блокирующий, тут же вызывается Thread.Sleep() на всех потоках - поэтому в первом случае в конце видны Thread-x-released (все потоки закончили работу). Время выполнения всего приложения -
    2. Все потоки постепенно захватывают семафор, т.е. ждут пока предыдущий его освободит и только потом засыпают. Уже тут время выполнения - 1с * (кол-во потоков / 2)

    P.S. Не забывай вызывать Thread.join после запуска!
    Ответ написан
    Комментировать
  • Как проинициализировать по умолчанию переменную?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    class Scratch {
    
        public static void main(String[] args) {
            var a1 = new A();
            var a2 = new A(10);
    
    
            System.out.println(a1); // A{a=5}
            System.out.println(a2); // A{a=10}
        }
    }
    
    class A{
        int a = 5; // default
    
        public A(int a) {
            this.a = a;
        }
    
        public A() {
        }
    
        @Override
        public String toString() {
            return "A{" +
                    "a=" + a +
                    '}';
        }
    }
    Ответ написан
    Комментировать
  • Как проинициализировать по умолчанию переменную?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Определить два конструктора - один с параметрами, а второй без, устанавливающий значения по умолчанию. При наличии файла читать из него параметры и вызывать конструктор с параметрами. При отсутствии файла вызывать конструктор по умолчанию. Если параметров много, то можно вместо множества полей использовать коллекцию или подключить шаблон "строитель", вам виднее, что будет правильнее в вашем случае.
    Ответ написан
    Комментировать
  • Есть ли разница запуска контейнеров по отдельности или через докер компос?

    vabka
    @vabka
    Токсичный шарпист
    А что поднятие одним файлом всех контейнеров, всех сетей, и всех волюмов, с последующим освобождением всего одновременно уже не является достаточным преимуществом? Да ещё и без конфликта имён
    Ответ написан
    Комментировать
  • Как компилировать jar в exe?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Во-первых, в 2023-м, как и во все предыдущие годы, и во все последующие, делать такого не надо. Если хотите распространять свой софт в виде платформозависимого бинарника, выбирайте соответствующий язык.
    Во-вторых, чтобы можно было без проблем открыть на другом ПК, можно в бинарник не компилировать. Уже лет шесть, как в составе JDK есть утилита jlink, позволяющая собрать приложение вместе с JRE и стартовыми скриптами.
    Ответ написан
    9 комментариев
  • Как POJO влияет на производительность приложения?

    Sputterspark
    @Sputterspark
    Как POJO влияет на производительность приложения?

    POJO - это аббревиатура Plain Old Java Object, то есть в переводе - старый добрый java-объект. А значит ты спрашиваешь "Как язык Java влияет на производительность приложения".

    А поле listCountry при каждом обращении заполняется с файла.

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

    Чего бы не использовать родные для спринга средства интернационализации?
    Ответ написан
  • Чем собирать метрики API?

    xez
    @xez
    TL Junior Roo
    micrometer/prometheus -> grafana
    Ответ написан
    Комментировать
  • @Bean в @Configuration и @Component. Разница?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Обычно с помощью @Bean создают объекты, которые требуют дополнительной настройки. Часто это какие-то компоненты из библиотек, например, http клиенты, пулы подключений и т.д.
    @Component и @Service используют обычно, когда ничего особенного при создании объекта не требуется.
    Ответ написан
    Комментировать
  • Spring boot websocket через postman всегда возвращает 403, как так?

    @My1Name
    Попробуйте добавить бин:
    @Configuration
    @EnableWebSocketSecurity  
    public class WebSocketSecurityConfig {
    
        @Bean
        AuthorizationManager<Message<?>> messageAuthorizationManager(MessageMatcherDelegatingAuthorizationManager.Builder messages) {
            return AuthorityAuthorizationManager.hasRole("USER");
        }
    }

    Возможно вы отправляете запросы без авторизации...
    Ответ написан
    Комментировать
  • Как сделать выборку контактов из БД и отправить им почтовую рассылку?

    @Dementor
    программист, архитектор, аналитик
    Тут только единый ответ - нужно дебажить!

    Если бы ты дебажил, а не кидал кучу "System.out.println" в поток вывода, то сразу заметил бы, что в usertoSend у тебя результаты только последнего вызова contactsRepository.selects_email(), а в listUsersAffected только последний результат вызова choosenOneRepository.select_affected_users(). В каждом цикле просто перезаписываешь данные предыдущих итераций.
    Ответ написан
    3 комментария
  • Как исправить ошибку java "Unable to locate a Java Runtime that supports apt"?

    @Dementor
    программист, архитектор, аналитик
    Менеджер пакетов APT сам управляет зависимостями и доставляет нужные версии связанных пакетов. Если инсталл выдает ошибку, то сперва нужно обновить кеш зависимостей:

    sudo apt update
    sudo apt upgrade
    sudo apt full-upgrade
    sudo apt autoremove
    Ответ написан
    2 комментария
  • Какой самый быстрый способ прочитать/записать из большого файла?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Быстрота вне контекста смысла не имеет. Сам по себе вызов FileReader.readLine() достаточно быстрый, чтобы упираться в скорость передачи данных диска. Если вам не хватает скорости, то надо профилировать код, искать узкие места и оптимизировать их. Если узких мест нет, всё работает на пределе возможностей, то придётся смотреть в сторону распределённой обработки данных.

    P.S. Обращение к нативной памяти не быстрее, чем к куче, а вот выделяется она на много медленнее, так что в общем случае direct buffer вам не поможет. Если проблема со скоростью только в аллокациях и от них можно отказаться,, например при сквозной передаче считанного с диска в сеть, то стоит использовать канал и zero copy через DMA.
    Ответ написан
    3 комментария
  • Как правильно покрыть тестами REST API сервис на Java?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Варианты такие:
    1. Мокать методы связанные с интеграцией
    2. Использовать mockServer для подмены внешних сервисов
    3. Использовать testcontainers для поднятия всего нужного окружения

    Выбирать вам придется самостоятельно, руководствуйтесь здравым смыслом.
    Ответ написан
    Комментировать
  • Как в Reactor Netty обрабатывать ошибки внутри Flux?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Вам нужно.
    - Сделать флюкс не строки, а какого-то своего типа, который будет содержать статус и саму строку
    - Добавить логику, при которой статус будет зависить от содержания флюкса

    Тогда методом .onErrorResume можно будет поймать исключение, обработать и добавить к ответу.
    Ответ написан
    Комментировать
  • Как достучаться до докер контейнера из браузера?

    @Kostik_1993
    Web Developer
    Для того чтобы из браузера или другой программы попасть в контейнер нужно пробросить порт.
    postgres:
        ports:
          - 5432:5432
        networks:
          - app-network

    Но в вашем случае вам нужно из одного обратиться к другому. Судя по всему вы хотите сделать коннект к БД из вашего приложения, но у вас указан localhost. Нужно прописать postgres вместо него
    Ответ написан
    Комментировать