Open Medvěd

Každá pořádná firma v našem oboru má svůj účet na GitHubu, kde dává vývojářské komunitě k dispozici své produkty, knihovny a užitečné utilitky. Teď k těmto velikánům konečně patří i medvědi :-)

Adam Lindenthal

Photo by pixpoetry on Unsplash

Uf, konečně máme za sebou medvědí coming out. Přiznáváme se, jsme na open source. Těžko si lze bez něj naši práci vůbec představit. Jak se ale říká, blaženější je dávat než dostávat, a tak už nějakou dobu sílilo naše nutkání něčím do světa open source také přispět. Pro firmu, kterou do značné míry živí zakázkový vývoj pro klienty, to ale samozřejmě není až tak úplně přímočará záležitost - většinu kódu, který vytvoříme, je naopak třeba střežit jako oko v hlavě. Dlouho jsme proto neměli v ruce nic, co bychom mohli jen tak zveřejnit.


Čas plynul, pracovali jsme na zakázkách, zakládali nové projekty, ty pak vyvíjeli, nasazovali a udržovali. Po chvíli nás ale začalo trošku nebavit (eufemisticky řečeno), jak pokaždé začínáme v podstatě od nuly. Řeknete si, že na založení projektu není nic složitého a máte jistě pravdu, ale když se to má udělat pořádně a nechcete se k tomu za týden vracet, už to není záležitost na pár minut.


Lenost je motorem pokroku


Rozhodli jsme se proto, že si usnadníme život. Usoudili jsme, že potřebujeme kostru našeho typického projektu, ze které už jen drobnými změnami získáme pro nový projekt poctivý fundament. Základní rámec, který vezmeme, zkontrolujeme, zda je vše fakticky i morálně aktuální a můžeme začít pracovat na tom důležitém. Na druhou stranu, snažili jsme se odolat všem možným lákadlům, nepřidat tam všechno, co "by se mohlo jednou hodit" a udržet tak společný základ našich projektů čistý a přehledný.

S kostrou jde všechno lépe :-) Photo by Sebastián León Prado on Unsplash


Zmínil jsem pojem "náš typický projekt", co si pod tím představit? Java aplikaci se Springem, RESTovým API a relační databází, pokrytou unitovými a integračními testy, s nějakým mechanismem kontroly a řízení kvality kódu. To je zatím náš nejčastější modus operandi na backendu a "problém", který jsme se rozhodli řešit jako první. Děláme toho sice víc (frontendy, mobilní appky, microservices, Python, Kotlin), a ještě mnohem víc toho máme v plánu, i u ostatních "aktivit" by se hodilo něco podobného mít, ale ani Řím nebyl postaven za den, začali jsme tedy tím, co nás pálilo nejvíc.


Kostru jsme vytvořili, zabydlela se v našem interním repozitáři a nějaký čas se nic nedělo. Nebyl čas, někdy taky musíme vydělávat na rohlíky. Několikrát jsme se k ní vrátili, upravovali, přidávali, ubírali a zase přidávali... Po čase jsme ji měli konečně možnost vyzkoušet na reálném novém projektu, z čehož sice vzešly některé další drobné úpravy, nicméně přístup jako takový se nám osvědčil. Funguje to - kočka žije, pane Schrödingere!


Buďte líní i vy

A protože dlouhodobě nechceme být jen manufakturou na kód, ale snažíme se, aby nás práce bavila, abychom ji dělali lépe než je v oboru zvykem, zlepšovali sami sebe i kultivovali své IT okolí, dává nám smysl se o plody své práce podělit s ostatními, usnadnit jim práci a třeba se od nich díky zpětné vazbě i něco naučit. Kromě Medvědáren, našich technologických meetupů, byl proto medvědí účet na Githubu dalším logickým krokem. A právě tam najdete bear-spring-starter, zmíněnou kostru javovského projektu coby naši první open source vlaštovku.

První vlaštovka - jaro ještě nedělá, ale snad nezůstane dlouho sama... Photo by Sebastián León Prado on Unsplash


Co vám to přinese

Jednoznačně rychlý start projektu. Pokud máte nainstalovanou javu a docker (vč. docker-compose), stačí zkopírovat všechny soubory někam k sobě a máte funkční projekt se vzorovým RESTovým endpointem, nastavenou persistencí přes Spring Data (JPA), rozchozenými integračními testy s PostgreSQL v Dockeru, debugovacím logováním request/response, atd. Stačí projít, zda vše odpovídá vašim potřebám, a začít produkovat hodnoty. Je to jako instantní polévka, jen chutnější a z kvalitních surovin:


  • Gradle wrapper, Gradle build script v Kotlinu
  • Spring Boot
  • dependency injection přes Spring
  • Spring Data, JPA, PostgreSQL
  • REST API (JAX-RS / RestEasy)
  • JUnit5, Mockito, integrační testy přes Docker
  • custom-built .gitignore
  • integrace na Sonar, checkstyle
  • vzorový end-to-end use-case od REST API až do DB, včetně unit testu a integračního testu


Použití a nastavení

Celý projekt najdete na našem githubu pod názvem bear-spring-starter.


Změny v nastavení

Pokud si chcete pohrát s nastavením, zkuste začít na těchto místech. Žádnou paniku, většinu je možné nechat bez povšimnutí, minimálně pro začátek.


/application/src/main/resources/sql/schema.sql

 - zde můžete doladit své databázové schéma

 - pozor, před každým integračním testem se vyčistí databáze a vykoná tento skript, takže v okamžiku, kdy pustíte testy automaticky příjdete o všechno, co máte ve vývojové databázi


/config/docker/environment-compose.yml

 - pro nastavení databáze běžící v dokeru, případně dalších externích závislostí, které časem přidáte

 - lze nastavit port, na který se namapuje db server z kontejneru "ven" (pokud nemáte port zabraný něčím jiným, není třeba se tím vůbec zatěžovat)

 - více o struktuře souboru najdete zde

 - pro začátek není třeba měnit


/application/src/main/resources/application.yml

 - springovský konfigurační soubor v YAML formátu

 - lze nastavit logging, vystavený port a další

 - pokud jste náhodou změnili port v environment-compose.yml, je potřeba jej změnit i zde

 - obsahuje jeden spring profil (development), při nasazování na testovací a produkční prostředí můžete konfiguraci rozšířit

 - pro začátek není třeba měnit


/build.gradle.kts

 - gradlovský build script

 - sem (a do stejně pojmenovaných souborů v jednotlivých modulech) lze přidávat další potřebné knihovny a měnit parametry buildu

 - pro začátek není třeba měnit


- /gradle.properties

 - nastavení integrace na Sonar

 - pokud nemáte k dispozici instanci sonaru, není třeba měnit, pokud ano, změníte URI a token a máte kontrolu kvality, voilà


Změna balíku

Pravděpodobně si budete chtít změnit java package, aby odpovídal vašemu projektu. S tím vám pomůže vaše oblíbené vývojové prostředí.


Užitečné příkazy

Build

- klasický build:  ./gradlew clean build

- build vč. testů: ./gradlew clean build integrationTests

- spustitelný jar: ./gradlew bootJar (bude vytvořen v /application/build/libs)


Databáze

- spuštění databáze v dockeru: ./gradlew composeUp

- k databázi se pak připojíte z jakéhokoli klienta

- např. z konzolového psql pomocí příkazu: psql -h localhost -U postgres -d bss


Spuštění aplikace

- z vašeho oblíbeného IDE

- pomocí gradlu: ./gradlew bootRun

- z vygenerovaného spustitelného jar souboru: java -jar <executable.jar>


Neupejpejte se


Směle do toho, stahujte a tvořte. Pokud vás něco napadne, komentujte, dejte nám zpětnou vazbu. Pokud nám chcete projekt vylepšit, nebojte se forkovat a dělat pull requesty. A pokud se vám projekt líbí, nebo vám udělal dobrou službu, dejte nám hvězdičku na GitHubu.

Přejeme vám, ať s ušetřeným časem naložíte pokud možno příjemně :-) Samozřejmě budeme rádi za připomínky a návrhy a držte nám palce, ať zase brzy přijdeme s něčím dalším.



programování
Java
Gradle
Spring
docker
GitHub
project set-up
Open source
Zpět →