• Как можно избежать написания большого количества функций репозитория?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Hibernate
    Седой и строгий
    Criteria API. А ещë лучше фасетный поиск.
    Ответ написан
    Комментировать
  • Как генерировать соурсы jOOQ, когда БД тоже в Docker?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Будет ли доступна БД при старте приложения, чтобы можно было сгенерировать соурсы для jOOQ?

    Если docker-compose, то можно healthcheck сделать и переподнимать, пока не будет доступно
    таже можно настроить переподнятие, если контейнер с приложением зафейлится... а если он при поднятии првоеряет переменные окружения, то будет фейл

    Пробовал следующие варианты - объявляю args внутри build. Пробовал через environment. А внутри pom.xml уже получаю значение переменной таким образом `${env.XXX}`

    у вас docker-compose есть?
    там можно в секции environments указать
    Ответ написан
    7 комментариев
  • Как предотвращать XSS в Spring?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Зачем делать что-то для галочки? Если ты внедрил функцию то ты должен понимать те кейсы в которых она
    работат. Попробуй сам воспроизведи XSS-атаку на себя и проверь как она работает.

    Иначе будет в исходниках балласт который ты себе объяснить не можешь и newcomer придет и будет спрашивать про исходник а ты и ему не объяснишь.
    Ответ написан
    Комментировать
  • Как наполнять Flux по мере поступления данных?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Для этого есть Sinks:

    public static void main(String[] args) throws Exception {
            Sinks.Many<Integer> sinks = Sinks.many()
                    .multicast() 
                    .onBackpressureBuffer(); // Изучайте документацию. Тут много вариантов
    
            sinks.asFlux()
                    .subscribe(System.out::println);
    
            // В очереди ничего нет. Ничего не происходит
            Thread.sleep(1000);
            
            // Наполняем очередь элементами
            sinks.tryEmitNext(1);
            sinks.tryEmitNext(2);
            sinks.tryEmitNext(3);
        }
    Ответ написан
    3 комментария
  • Используем kafka + spring boot, периодически listener перестает получать сообщения?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    На производительность кафки влияет 4 сущности. Конфиг брокера, продюсера, консюмера и message configuration.
    Очень сложно разбираться в том что у тебя происходит на основании такого странного теста. Скажи
    сколько времени ты ждал этого загадочного listener. Как ты ждал. В какой лог смотрел. Почему
    ты вообще решил что это проблема. Может продюсер ничего не производит. Короче дай картину
    происходящего более подробную.
    Ответ написан
    2 комментария
  • Какие-то проблемы с jdk или с конфигураций?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Из этого следуют два факта:
    1. Знания надо получать системно и последовательно, а не хвататься сразу за Spring.
    2. Бездумное повторение за туториалами в интернете - это плохое обучение.
    Ответ написан
    Комментировать
  • Как поменять content-type, который приходит от клиента в SOAP сервисе?

    @Dementor
    программист, архитектор, аналитик
    По сложности:
    1. Попросите клиента присылать хидеры в правильном формате.
    2. Между вашей системой и клиентом поставьте прокси, который будет преобразовывать зоголовки (nginx - отличный выбор)
    3. Напишите автоконфигурацию, которой приравняйте заголовок application/health.message+xml к text/xml
    Ответ написан
    3 комментария
  • Как поменять content-type, который приходит от клиента в SOAP сервисе?

    leahch
    @leahch
    3Д специалист. Долго, Дорого, Дерьмово.
    Сделайте servlet фильтр https://www.digitalocean.com/community/tutorials/j...
    В нем и меняйте.
    Ответ написан
    3 комментария
  • Вопрос по сокетам Java? Как быть грамотно?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    0x12,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14

    0x12 - команда
    0х13 - длина пакета
    0х14 - тело пакета

    клиент подключается к серверу отправляя команду 0х01
    сервер отзывается ответом 0х02 где в теле пакета список каналов
    клиент отправляет 0х03 с указанием комнаты, получив ответ от сервера со списком пользователей
    он переходит в прослушивание.

    Другой клиент отправляет пакет с сообщением. Сервер его слышит. Перебирает всех в комнате и кидает им сообщение
    Ответ написан
    Комментировать
  • Хорошее ли решение разделение таблиц юзер и роли?

    @alexalexes
    Вы выделили в системе два класса сущностей. Одна - Пользователь, вторая - Роль.
    Под каждый класс нужна отдельная таблица.
    Как определить какие взаимоотношения между этими классами?
    Нужно примерить следующие коммутативные гипотезы:
    Первая пара гипотез:
    "Один пользователь должен (может) иметь только одну роль."
    "Одна роль должна (может) быть назначена многим пользователям."
    Вторая пара гипотез:
    "Один пользователь должен (может) иметь несколько ролей."
    "Одна роль должна (может) быть назначена многим пользователям."
    Если в вашей архитектуре системы справедлива первая пара гипотез, то вы строите взаимоотношение между классами Роль и Пользователь как "один ко многим". Это значит, что у таблицы Пользователь будет внешний ключ в виде идентификатора роли, тем самым вы каждому пользователю сможете назначить только одну роль. Но сами роли могут повторятся у разных пользователей.
    Если в вашей архитектуре системы справедлива вторая пара гипотез, то вы строите взаимоотношение между классами Роль и Пользователь как "многим ко многим". Для этого нужно создать промежуточную таблицу, например Пользователь_и_роль, в которой будут два внешних ключа - идентификатор пользователя и идентификатор роли пользователя (можно, но технически нужно еще создать еще идентификатор первичного ключа, чтобы можно было корректно обращаться к записям этой таблицы, не путая их). В этом случае каждому пользователю можно выделить целый набор ролей, не ограничиваясь одной ролью.
    Ответ написан
    Комментировать
  • Почему Facebook и Vk написаны на PHP, если большие базы данных предполагаются делать на Java и C#?

    @Dementor
    программист, архитектор, аналитик
    Facebook. Изначально все начиналось как развлекуха для студентов. А для студентов в нулевых PHP для веб-разработки - это стильно, модно, молодежно, особенно если сравнивать с популярным в то время Perl. Когда пользователи повалили толпой, то они напряглись и перешли через несколько лет на Hyper-PHP

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

    P.S. Не нужно путать "лучшие практики" и "так исторически сложилось".
    P.S.S. Вообще-то "большие базы данных предполагаются делать на" Erlang ))
    Ответ написан
    Комментировать
  • Какую книгу взять новичку в разработке микросервисов на Spring Framework?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Вам надо почитать про spring cloud.
    Я нашел две книги по теме:
    Java в Облаке Джоша Лонга
    И
    Микросервисы spring в действии.
    Ни одну из них не читал - рекомендовать не буду.

    На joker/jpoint постоянно есть доклады по спринг клауду. Можно их посмотреть чтобы въехать в тему.
    Ответ написан
    Комментировать
  • Какую книгу по Java выбрать новичку с небольшим опытом на другом языке?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Алгоритмы брать не надо. Седжвик вообще писал не про Java а только про алгоритмы.
    У него - целое семейство книг такого вида. Сначала Алгоритмы на С. Потом на C++ И потом Java. Он по сути портировал исходники. Какой толк вам в таком портировании?

    А Хорстман, Эккель - вполне себе норм.
    Ответ написан
    Комментировать
  • Как отключить синхронизацию в Яндекс Диск на Linux?

    @Exmender
    Возможно, кому-то ещё поможет, т.к. webdav не всем подходит, иногда всё же нужно хранить файлы локально.

    В хелпе яндекса синтаксис исключений указан в таком виде:
    exclude-dirs="exclude/dir1,exclude/dir2"
    Наверное, автора ввело в заблуждение слово exclude/. Но его всё же подставлять не нужно.

    Для примера, если нужно исключить некоторые директории в корне Яндекс Диска, то в конфиге прописать:
    exclude-dirs="Загрузки,Программы,Фотокамера"
    Тогда эти директории и содержимое локально скачиваться не будут. Для себя оставил одну папку, с которой нужна синхра, остальные занёс в исключения.
    Ответ написан
    Комментировать
  • Как перекодировать строки из windows 1251 в читаемый вид в java?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Вот так должно заработать:
    System.out.println(new String(s.getBytes(StandardCharsets.UTF_8)));
    Ответ написан
    1 комментарий
  • Как в Reactor Netty Http Server получить тело POST-запроса?

    leahch
    @leahch
    3Д специалист. Долго, Дорого, Дерьмово.
    https://www.baeldung.com/java-netty-http-server. Здесь кажется есть ответ.
    Ответ написан
    Комментировать
  • Как отключить WARN logs по ExceptionHandler в Spring?

    xez
    @xez
    TL Junior Roo
    Похоже, вам пригодятся Log Groups
    Ответ написан
    Комментировать
  • Как оптимизировать задачу?

    Lorien_Elf
    @Lorien_Elf
    Keep calm and drop database
    Я сварщик ненастоящий, но вижу два пути:
    - Отсылать на сервер данные массивом, а не поштучно.
    - Отправлять штучные запросы параллельно.

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

    axifive
    @axifive
    Software Engineer
    Так нет же запрета создать массив из ArrayList
    ArrayList<Object>[] list = new ArrayList[5];
    for (int i = 0; i < 5; i++) {
       list[i] = new ArrayList<Object>();
    }
    list[0].add(new Integer(1));
    list[0].add(new String("2"));
    list[1].add(new Float(5.0));

    как и ArrayList из массивов
    ArrayList<Integer[]> list = new ArrayList<Integer[]>();
    Ответ написан