Java Portal | Программирование
13.2K subscribers
1.16K photos
95 videos
37 files
1.07K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Java-совет: когда нужно наполнять значения в Map, например списки, удобно использовать computeIfAbsent().

Классический способ:

Map<String, List<String>> map = new HashMap<>();
if (!map.containsKey("key")) {
map.put("key", new ArrayList<>());
}
map.get("key").add("listValue");


С использованием computeIfAbsent:

map.computeIfAbsent("key", k -> new ArrayList<>())
.add("listValue");


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Твой Dockerfile не "простой". Он просто недописан.

Большинство девов за всю жизнь используют всего 5 инструкций Dockerfile:
FROM, COPY, RUN, EXPOSE, CMD, ну и иногда ENV, если уж прям заморочились. 😱

Вот почему твоя команда Ops и пользователи молча тебя ненавидят.

Вот несколько инструкций, про которые ты, скорее всего, не знаешь:

- HEALTHCHECK: контейнер не становится здоровым только потому, что он запущен.

Нет, Kubernetes сам не поймет, что приложение внутри уже сдохло.
Скажи ему, как это проверять. Или дай Ops’ам удовольствие дебажить цикл перезапусков контейнеров в проде.

- SHELL:

По умолчанию это /bin/sh -c. Хочешь другое, используй SHELL.
Меньше экранирования, меньше проблем с кроссплатформой.

- STOPSIGNAL: не оставляй приложение подвисшим.

Задает сигнал, который Docker отправляет при остановке контейнера.
Используй тот сигнал, который твое приложение реально обрабатывает.

Больше никаких зомби-контейнеров и сломанной "корректной остановки".

- ONBUILD

Хочешь сделать базовые образы умнее, используй это.
Хочешь развалить чужой пайплайн, используй неправильно.

- ARG vs ENV: перестань путать "во время сборки образа" и “во время запуска контейнера”,

ARG: существует только во время сборки
ENV: остается в финальном образе

Если ты не понимаешь разницу, не удивляйся, когда приложение ведет себя по-разному на dev и в prod.

- LABEL: метаданные не опциональны.

Это не для красоты. Это нужно инструментам, CI и аудиторам. Потом сам себе спасибо скажешь.

Dockerfile это не шелл-скрипт.
Это продовый код.
Он описывает систему, которую ты поставляешь.

Ты же не выкатываешь наполовину сделанное API, так перестань выкатывать наполовину сделанные образы.
Научись писать Dockerfile, который не отстой. 💩

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51😁1
Java tip: используй Files.walk(), чтобы рекурсивно пройтись по файлам в каталоге.

public static void main(String[] args) {
Path startPath = Paths.get("src");

try (Stream<Path> paths = Files.walk(startPath)) {
paths
.filter(Files::isRegularFile)
.filter(path -> path.toString().endsWith(".java"))
.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11