Spuštění kódu při startu Springu

Pokud potřebujete spusti určitý kód po naběhnutí Springu, můžete použít CommandLineRunner. Je to rozhraní, které indikuje beanu, která má být spuštěna jakmile je ve Spring aplikaci.

Interface used to indicate that a bean should run when it is contained within a SpringApplication. Multiple CommandLineRunner beans can be defined within the same application context and can be ordered using the Ordered interface or Order @Order annotation.

Zde je jednoduchý příklad, kdy si vytvoříme konfigurační třídu s názvem SpringDataConfig.

Číst dálSpuštění kódu při startu Springu

Co znamená WIP v názvu větve

Pokud v rámci GitLabu nebo GitHubu nazvete větev s prefixem WIP a mezerou, půjde na tuto větev udělat merge request, ale nebude ji možné mergnout. WIP v tomto případě znamená Work In Progress. Tato vlastnost má výhodu v tom, že můžete ukázat aktuální stav ve své větvi tak, aby ostatní viděli vaše změny (diff), ale nechcete, aby tyto změny byly sloučeny (merge). Pokud byste vytvořili merge request a pouze tam přidali komentář, je možné, že by si ho někdo z kolegů nevšiml, a vaši práci mergnul.

Zdroj: stackoverflow.com/…/github-what-is-a-wip-branch

Instalace Dockeru na Linux Mint

Instalaci Dockeru na Ubuntu jsem se věnoval v jednom z předchozích příspěvků. Zdálo by se, že protože Linux Mint je založen na Ubuntu, bude instalace stejná. Podobná je, ale v jedné části se liší. Při instalaci na Ubuntu se používá příkaz

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Ten je pro Mint potřeba změnit následovně

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

Je to proto, že Linux Mint používá vlastní jména verzí, která se liší od Ubuntích.

Pokud už jste sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" zadali (přídá úložště do zdrojů), odstraňte ji ze zdrojů. Pravděpodobně bude v /etc/apt/sources.list.d/additional-repositories.list. Pak již update proběhne v pořádku.

Zdroj: www.unixtutorial.org/install-docker-in-linux-mint-19-1

Řazení dat v PostgreSQL podle části řetězce

V tomto příspěvku ukáži, jak získat unikátní emaily ze sloupce databáze PostgreSQL seřazené podle domény. K tomu použijeme funkci substring(co, odkud, kam).

select email from  table_name order by substring(email, position('@' in email), length(email));

Uvedený select zobrazí záznamy ze sloupce email tabulky table_name a seřadí je dle domény (podle části řetězce, který vrátí substring). Pokud chceme unikátní, select změníme následovně:

select email from (select distinct email from table_name) as sub order by substring(email, position('@' in email), length(email));

Spring Data a Liquibase

Liquibase umožňuje hlídat změny v databázi. Každá změna (blok změn) má svůj vlastní changeset. Liquibase si vytváří dvě vlastní tabulky: databasechnagelog, kde jsou uloženy provedené changesety a databasechangeloglock, která slouží pro zamykání (řeší případ přístupu, kdy více vývojářů dělá změny v databázi současně). Může se stát, že pokud Liquibase neskončí korektně a zůstane zámek. Pak je potřeba locked nastavit na false manuálně.

Číst dálSpring Data a Liquibase

Řízení závislostí v Gradle

V Gradlu v bloku dependencies {...} je možné zadat závislost a hlavně také, kdy jsou tyto závislosti potřeba (níže zmíněnou kofiguraci přidává Java plugin). Knihovny, které potřebujete jak pro kompilaci a tak pro běh, zadáte jako implementation (dříve compile). Pokud danou závislost potřebujete pouze při kompilaci použijete compileOnly, pokud pouze v runtime tak runtimeOnly.

Zde je jednoduchý příklad. Mám projekt v Kotlinu a v rámci tohoto projektu používám knihovnu Klaxon pro parsování json. Tuto knihovnu potřebuji jak při kopilaci, tak při běhu programu. Použiji tedy

implementation("com.beust:klaxon:5.0.9")

Pokud bych použil runtimeOnly, projekt by se nezkompiloval. Pokud bych použil compileOnly, projekt by se sice zkompiloval, ale po spuštění, když by chtěl použít knihovnu Klaxon, by skončil chybou.