Скрытая фича Spring Boot: Автогенерация Banner
Привет, народ!
Попробую порадовать вас серией постов со скрытыми (и не очень) фичами Spring-Boot.
И начнем мы с фичи, внедрив которую, именно ты станешь самым стильным разрабом на районе и больше никто не вспомнит про сына маминой подруги 😎
Погнали 💨
Надоела скучная надпись SPRING-BOOT при старте приложения?
А знал ли ты, что баннер - это место для твоей рекламы? 😏
Как изменить баннер?
Просто добавь файл
Автоматическая генерация баннера
Если не хочешь писать ASCII-арт вручную, используй генератор: Spring Boot Banner Generator.
Поддержка переменных
В
Эти переменные берутся из
Некоторые полезные переменные:
●
●
●
●
Куда выводятся переменные?
Все переменные, указанные в
Альтернативные форматы
Можно использовать изображения (banner.jpg, banner.png) или даже файлы .gif, а Spring Boot сам преобразует их в ASCII.
Вариант с картинками у меня не заработал🗿 .
Но в инете пишут, что такое точно можно провернуть 😅.
Если у тебя получится, закинь решение в комментах и можешь выкидывать на помойку гайды по пикапу, потому-что отныне все телочки будут...так всё, посты моя мама читает, (мама привет), поэтому немного сбавим пыл 😂
Привет, народ!
Попробую порадовать вас серией постов со скрытыми (и не очень) фичами Spring-Boot.
И начнем мы с фичи, внедрив которую, именно ты станешь самым стильным разрабом на районе и больше никто не вспомнит про сына маминой подруги 😎
Погнали 💨
Надоела скучная надпись SPRING-BOOT при старте приложения?
А знал ли ты, что баннер - это место для твоей рекламы? 😏
Как изменить баннер?
Просто добавь файл
banner.txt в папку src/main/resources/ и напиши в нем любой ASCII-текст.Автоматическая генерация баннера
Если не хочешь писать ASCII-арт вручную, используй генератор: Spring Boot Banner Generator.
Поддержка переменных
В
banner.txt можно использовать переменные, которые будут подставляться при запуске приложения. Например:Application: ${application.version}
Spring Boot: ${spring-boot.version}Эти переменные берутся из
application.properties или application.yml, а также системных свойств Spring Boot.Некоторые полезные переменные:
●
${spring-boot.version} – версия Spring Boot●
${application.version} – версия приложения (если указана в pom.xml или build.gradle)●
${java.version} – версия Java●
${user.name} – имя текущего пользователя системыКуда выводятся переменные?
Все переменные, указанные в
banner.txt, выводятся в консоль при старте приложения, перед логами Spring Boot. Это позволяет сразу увидеть информацию о версии приложения, среде выполнения и других параметрах.Альтернативные форматы
Можно использовать изображения (banner.jpg, banner.png) или даже файлы .gif, а Spring Boot сам преобразует их в ASCII.
Вариант с картинками у меня не заработал
Но в инете пишут, что такое точно можно провернуть 😅.
Если у тебя получится, закинь решение в комментах и можешь выкидывать на помойку гайды по пикапу, потому-что отныне все телочки будут...
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤4😁3👍2
Что выведет код выше?
Anonymous Poll
18%
true
58%
false
22%
Ошибка компиляции
1%
Исключение в runtime
Всем привет!
На этот год у меня весьма амбициозные планы по развитию своей наставнической деятельности.
Будет больше видосов на YouTube. А в канале больше кружопелей, подксатов, вопросов-ответов, и полезных постов.
Все это в амбициозных планах, которые разбиваются о мою ленивую жопу 🍑
Можно было бы списать все на большую загруженность, сбитый режим, нехватку времени, магнитные бури и на Венеру не в том доме, но... есть подозрение, что виновник торжества где-то внутри, а не снаружи🗿 .
Поэтому, пока что, вместо сочного видоса или моего бородатого лица в кружопеле, я подготовил для вас маленькую статейку на тему того,
Почему 0.1 + 0.2 != 0.3 в Java?
Судя по распределению голосов выше -победил Трамп почитать ее было бы полезно всем, кто тыкнул не в false 😅
На этот год у меня весьма амбициозные планы по развитию своей наставнической деятельности.
Будет больше видосов на YouTube. А в канале больше кружопелей, подксатов, вопросов-ответов, и полезных постов.
Все это в амбициозных планах, которые разбиваются о мою ленивую жопу 🍑
Можно было бы списать все на большую загруженность, сбитый режим, нехватку времени, магнитные бури и на Венеру не в том доме, но... есть подозрение, что виновник торжества где-то внутри, а не снаружи
Поэтому, пока что, вместо сочного видоса или моего бородатого лица в кружопеле, я подготовил для вас маленькую статейку на тему того,
Почему 0.1 + 0.2 != 0.3 в Java?
Судя по распределению голосов выше -
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍6🔥4🤣2👎1
Иногда мне пишут: Анзор, интеграция поломалась.
Тут несколько вариантов:
1. Интеграция просто выключена
2. Интеграция поломалась
3. Увольняться
Увы, пока что вариант 3 неприемлем, так что разбираемся с тем, включена ли интеграция или выключена.
Стоит сказать, что данная интеграция запрашивает данные из внешнего сервиса и сохраняет в нашу базу.
Запрашивает прямо селектом из внешней базы.
И как-то раз, мы всю базу внешнему сервису и положили.
Менеджеры были настолько ошеломлены размерами черенков от лопат, что попросили сделать аж 2 переключателя, которые контролировали бы работу этой интеграции, а заодно страховали бы их нижнюю чакру от надругательств.
Ну так вот, первый переключатель находится в таблице системных настроек. В нем простой true/false. Чтобы можно было включать и выключать в рантайме.
А второй - в application.yml
Тоже true/false пропертя.
Над сервисом, который отвечает за логику интеграции стоит
А теперь загадка:
Как посмотреть с каким значением этой проперти сервис задеплоили на прод?
Приложуха крутится в докере, к нему есть доступ.
Актуатора нет(
Накидывайте варианты, и позже расскажу как я выучил команду docker cp⭐️
Тут несколько вариантов:
1. Интеграция просто выключена
2. Интеграция поломалась
3. Увольняться
Увы, пока что вариант 3 неприемлем, так что разбираемся с тем, включена ли интеграция или выключена.
Стоит сказать, что данная интеграция запрашивает данные из внешнего сервиса и сохраняет в нашу базу.
Запрашивает прямо селектом из внешней базы.
И как-то раз, мы всю базу внешнему сервису и положили.
Менеджеры были настолько ошеломлены размерами черенков от лопат, что попросили сделать аж 2 переключателя, которые контролировали бы работу этой интеграции, а заодно страховали бы их нижнюю чакру от надругательств.
Ну так вот, первый переключатель находится в таблице системных настроек. В нем простой true/false. Чтобы можно было включать и выключать в рантайме.
А второй - в application.yml
Тоже true/false пропертя.
Над сервисом, который отвечает за логику интеграции стоит
@ConditionalOnProperty и сервис интеграции зависит от этой самой проперти.А теперь загадка:
Как посмотреть с каким значением этой проперти сервис задеплоили на прод?
Приложуха крутится в докере, к нему есть доступ.
Актуатора нет(
Накидывайте варианты, и позже расскажу как я выучил команду docker cp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥4❤3😨1
Всем привет!
Пропал на какое-то время. Буду исправляться.
Сейчас в разработке обучающий видос по ACID и Transactional🔥
Одна из любимых тем на собесах🤌
Хочу максимально упростить освоение этой приблуды 🤓
Расскажу про уровни изоляции транзакций.
Разберем транзакции в Spring
различные варианты propagation аннотации Transactional.
Выложу ориентировочно завтра, так что до встречи на ютубе 🤝
Пропал на какое-то время. Буду исправляться.
Сейчас в разработке обучающий видос по ACID и Transactional
Одна из любимых тем на собесах
Хочу максимально упростить освоение этой приблуды 🤓
Расскажу про уровни изоляции транзакций.
Разберем транзакции в Spring
различные варианты propagation аннотации Transactional.
Выложу ориентировочно завтра, так что до встречи на ютубе 🤝
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤4👍3
Ура, товарищи!
Наконец этот видос загрузился)
Накидайте плз лайков, но только если будет интересно)
https://www.youtube.com/watch?v=Qx7fZqt9cAY
Наконец этот видос загрузился)
Накидайте плз лайков, но только если будет интересно)
https://www.youtube.com/watch?v=Qx7fZqt9cAY
YouTube
ACID и уровни изоляции транзакций | Простое объяснение с примерами ошибок
Telegram: https://news.1rj.ru/str/+HTd2UpOAjWYzNzZi
💾 ACID и уровни изоляции транзакций — простое объяснение с примерами
В этом видео мы разберём, что такое ACID в базах данных, зачем нужны транзакции и какие требования предъявляются к транзакционным системам. Вы узнаете…
💾 ACID и уровни изоляции транзакций — простое объяснение с примерами
В этом видео мы разберём, что такое ACID в базах данных, зачем нужны транзакции и какие требования предъявляются к транзакционным системам. Вы узнаете…
❤7🔥6👍5
Так, ребят, всем привет!
Я короче понял, что постов про Java делать не хочу.
1. Есть дофига каналов, где это итак делается. Например вот
2. Вся эта инфа итак есть в инете в больших объемах. И как-то изгаляться, чтобы написать как-то иначе о том, что уже 1000 раз обсосали - ну такое себе.
Несмотря на это я хочу приносить пользу, поэтому:
1. У нас есть чат, где вы можете задать вообще любой около-джавный вопрос - и получить ответ (более менее адекватный)
2. Мне понравилось делать видосы на ютюб. Вот там буду рассказывать и показывать что-то полезное (возможно)
А что тут?
Здесь хочу писать о себе, делиться мыслями, страхами, успехами и неудачами. Короче обычные, человечные, эмоциональные посты.
А то, чесслово, уже устал оправдываться перед собой за то, что посты не пишу про фишки джавы и тонкости спринга. Не хочу)
Я короче понял, что постов про Java делать не хочу.
1. Есть дофига каналов, где это итак делается. Например вот
2. Вся эта инфа итак есть в инете в больших объемах. И как-то изгаляться, чтобы написать как-то иначе о том, что уже 1000 раз обсосали - ну такое себе.
Несмотря на это я хочу приносить пользу, поэтому:
1. У нас есть чат, где вы можете задать вообще любой около-джавный вопрос - и получить ответ (более менее адекватный)
2. Мне понравилось делать видосы на ютюб. Вот там буду рассказывать и показывать что-то полезное (возможно)
А что тут?
Здесь хочу писать о себе, делиться мыслями, страхами, успехами и неудачами. Короче обычные, человечные, эмоциональные посты.
А то, чесслово, уже устал оправдываться перед собой за то, что посты не пишу про фишки джавы и тонкости спринга. Не хочу)
🔥14👍8❤2
Я, в общем-то, неплохой прогер. Но когда дело касается железа, я вообще нуб-нубяра.
Мне всегда было влом разбираться в железе, в том, какие видюхи топ, и что такое DDR3-4-5. А что у процов есть поколения — я вообще понял недавно.
Возможно, когда я был школьником и узнал, сколько стоит видюха для какой-то новой игры, мой мозг предпочёл впасть в технологический анабиоз.
Когда я закончил универ, я купил себе комп за 50к. Б/у. Он был хороший. До тех пор, пока я не решил его почистить. После моей чистки сгорело всё: материнка, видюха, проц, звуковая карта, оперативка. 🔥💀
И я заменил это всё чем-то, что влезло в корпус и в мой бюджет:
🖥 Материнка
ASUSTeK COMPUTER INC. B85M-E Rev X.0x microATX
⚙️ Проц
Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz, 4 cores
🧠 16 ГБ ОЗУ DDR3
⚡️ БП
Corsair VS 650W
🎮 Видюха
Radeon RX 570 Series
Как говорится: «Я его слепила из того, что было, ну а то, что было, то и полюбила».
Любовь эта длилась долго. Даже не любовь. Такой пресный брак, без радостей супружеской жизни. 😅
Я мог программировать — и хорошо. Ну а потом я устроился в Dins, и там мне дали ноут мечты:
💻 ThinkPad T14, i7 и 32 ГБ оперативки.
Так я и жил, пока не начал заниматься монтажом. И тут мои девайсы стали давиться объёмами возложенных на них задач. 🎬
Установка «я не могу купить себе новый комп, потому что это очень дорого» мешала наслаждаться процессом.
Я всё время искал какие-то обходные пути. Открыл для себя сервисы облачного гейминга, где можно арендовать мощное железо и работать условно через RDP.
Юзал два таких сервиса:
🎮 Warplay, Gatoga.
В принципе, если у вас быстрый и стабильный инет, то можно воспользоваться, чтобы погамать во что-нибудь.
Но я арендую квартиру, и инет тут не быстрый. Так что приходилось мириться с фризами и обрывами соединения. 📶😩
Терпелка у меня не резиновая, и в какой-то момент лопнула.
Стал смотреть варианты и грустить. Нужно было 200–300к на нормальный комп. Выше я писал, что я нубяра в железе, поэтому вообще не понимал, как собрать что-то адекватное, но подешевле.
Потом открыл Озон и увидел, что там прям топовый комп продают за 100+ 😳.
Я, конечно, не стал там ничего брать и попросил помощи у брата, который шарит за железо.
И он помог мне собрать комплектующие, суммарно на 131к.
💰 Жёну успокоил факт, что я потрачу на 170к меньше, чем мог, да и я сам остался довольным 😎.
Погамал в игрушки, монтаж летает 🚀.
Хочется в это всё впихнуть полезную мысль, которую я для себя открыл.
Часто мы думаем, что не можем что-то сделать. Если поменять угол восприятия и задаться вопросом: «А как я могу это сделать?», то, скорее всего, окажется, что невозможность рассеется, и вы увидите разные варианты обретения желаемого.
✨ Всем пис, обретайте желаемое! И если интересно подробнее про новый комп узнать — напишите в комментах! 😃
Мне всегда было влом разбираться в железе, в том, какие видюхи топ, и что такое DDR3-4-5. А что у процов есть поколения — я вообще понял недавно.
Возможно, когда я был школьником и узнал, сколько стоит видюха для какой-то новой игры, мой мозг предпочёл впасть в технологический анабиоз.
Когда я закончил универ, я купил себе комп за 50к. Б/у. Он был хороший. До тех пор, пока я не решил его почистить. После моей чистки сгорело всё: материнка, видюха, проц, звуковая карта, оперативка. 🔥💀
И я заменил это всё чем-то, что влезло в корпус и в мой бюджет:
🖥 Материнка
ASUSTeK COMPUTER INC. B85M-E Rev X.0x microATX
⚙️ Проц
Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz, 4 cores
🧠 16 ГБ ОЗУ DDR3
⚡️ БП
Corsair VS 650W
🎮 Видюха
Radeon RX 570 Series
Как говорится: «Я его слепила из того, что было, ну а то, что было, то и полюбила».
Любовь эта длилась долго. Даже не любовь. Такой пресный брак, без радостей супружеской жизни. 😅
Я мог программировать — и хорошо. Ну а потом я устроился в Dins, и там мне дали ноут мечты:
💻 ThinkPad T14, i7 и 32 ГБ оперативки.
Так я и жил, пока не начал заниматься монтажом. И тут мои девайсы стали давиться объёмами возложенных на них задач. 🎬
Установка «я не могу купить себе новый комп, потому что это очень дорого» мешала наслаждаться процессом.
Я всё время искал какие-то обходные пути. Открыл для себя сервисы облачного гейминга, где можно арендовать мощное железо и работать условно через RDP.
Юзал два таких сервиса:
🎮 Warplay, Gatoga.
В принципе, если у вас быстрый и стабильный инет, то можно воспользоваться, чтобы погамать во что-нибудь.
Но я арендую квартиру, и инет тут не быстрый. Так что приходилось мириться с фризами и обрывами соединения. 📶😩
Терпелка у меня не резиновая, и в какой-то момент лопнула.
Стал смотреть варианты и грустить. Нужно было 200–300к на нормальный комп. Выше я писал, что я нубяра в железе, поэтому вообще не понимал, как собрать что-то адекватное, но подешевле.
Потом открыл Озон и увидел, что там прям топовый комп продают за 100+ 😳.
Я, конечно, не стал там ничего брать и попросил помощи у брата, который шарит за железо.
И он помог мне собрать комплектующие, суммарно на 131к.
💰 Жёну успокоил факт, что я потрачу на 170к меньше, чем мог, да и я сам остался довольным 😎.
Погамал в игрушки, монтаж летает 🚀.
Хочется в это всё впихнуть полезную мысль, которую я для себя открыл.
Часто мы думаем, что не можем что-то сделать. Если поменять угол восприятия и задаться вопросом: «А как я могу это сделать?», то, скорее всего, окажется, что невозможность рассеется, и вы увидите разные варианты обретения желаемого.
✨ Всем пис, обретайте желаемое! И если интересно подробнее про новый комп узнать — напишите в комментах! 😃
❤🔥8👍8🔥7
Онлайн конференция по Spring. Бесплатно. Сейчас
Буквально только что узнал, что минуты через 3 начнется конференция по Spring на русском языке.
Если кому интересно, залетайте сюда:
https://springnow.ru
Буквально только что узнал, что минуты через 3 начнется конференция по Spring на русском языке.
Если кому интересно, залетайте сюда:
https://springnow.ru
spring-aio.ru
Spring Now 2025
В конференции примут участие не только эксперты сообщества Spring АйО, но и приглашенные лидеры индустрии.
👍4🔥4
Вопрос, на который я не ответил на собесе 👩💻
Короче, смотрите, все знают, что нельзя удалять из списка элементы в for-each цикле👎
А если не знают, то теперь знают.👍
Если внутри что-то удалить из списка (или добавить) будет атата: ⚠️
Когда мы итерируемся по коллекции через for-each , Компилятор преобразует for-each в использование
И даже если мы возьмем итератор:
Добавим что-то в список:
Пробежимся итератором по списку:
На первой же итерации в методе
❓ ❓ ❓
Вопрос: как итератор понимает, что список модифицировали?
Короче, смотрите, все знают, что нельзя удалять из списка элементы в for-each цикле
А если не знают, то теперь знают.
Если внутри что-то удалить из списка (или добавить) будет атата: ⚠️
ConcurrentModificationExceptionКогда мы итерируемся по коллекции через for-each , Компилятор преобразует for-each в использование
Iterator, как если бы код выглядел так:Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
}
И даже если мы возьмем итератор:
Iterator<String> iterator = list.iterator();
Добавим что-то в список:
list.add("B");
Пробежимся итератором по списку:
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
}
На первой же итерации в методе
next() получим ту же бяку: ⚠️ConcurrentModificationException 💩Вопрос: как итератор понимает, что список модифицировали?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍3❤1
В общем да, налутал вопросов с рейда на собес.
Поделюсь еще одним.🪙
Представим себе, что у нас есть два синхронизированных метода:
Вопрос:❓
Могут ли методы wtf1() и wtf2() выполняться одновременно разными потоками?
Поделюсь еще одним.
Представим себе, что у нас есть два синхронизированных метода:
class WTF {
public synchronized void wtf1() {
System.out.print(" wtf - 1 ");
}
public synchronized void wtf2() {
System.out.print(" wtf - 2 ");
}
}Вопрос:
Могут ли методы wtf1() и wtf2() выполняться одновременно разными потоками?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍5
Я пожалел, что не знал этого с утра 🙈
Сходил на еще 1 собес, к тем же ребятам.
Из того, на что можно было бы лучше ответить - способы блокировок в бд, а именно👩💻
А лучше не просто почитайте, а представьте, что есть таблица
Статус может быть
Задача - селектнуть все записи со статусом⚡
Делать это необходимо в нескольких потоках.
Т.е. 1 поток - 1 обработчик записей
Вопрос❓
👩💻 Какой селект написать для каждого обработчика, для того, чтобы организовать параллельную обработку записей?
Обработчики не знают друг о друге, их может быть от одного до N (количество не важно)
Хинт в начале поста закинул. Развлекайтесь)
Сходил на еще 1 собес, к тем же ребятам.
Из того, на что можно было бы лучше ответить - способы блокировок в бд, а именно
select for update
Почитайте, будет полезно.А лучше не просто почитайте, а представьте, что есть таблица
order с полями:id
amount
statusСтатус может быть
PENDING, PROCESSED.Задача - селектнуть все записи со статусом
PENDING и обновить на статус - PROCESSED
Важный момент!Делать это необходимо в нескольких потоках.
Т.е. 1 поток - 1 обработчик записей
Вопрос
Обработчики не знают друг о друге, их может быть от одного до N (количество не важно)
Хинт в начале поста закинул. Развлекайтесь)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤3👍2
Шпаргалка по Kafka.pdf
8.7 MB
Всем привет!
Ловите шпору по кафке, надеюсь будет полезно 😎
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤2👍1
Не будьте равнодушными к своей работе, особенно если это ваша первая работа.
Это разбивает сердце лидам 💔
И приводит к увольнениям 😅
Подробности расскажу позже
Голосовуха естественно выложена с согласия голосообладателя
Это разбивает сердце лидам 💔
И приводит к увольнениям 😅
Подробности расскажу позже