MySQL v Dockeru

Chcete si vyzkoušel MySQL, ale nechcete ji instalovat do počítače. Použijte docker. Zde je příklad pro použití docker-compose.

docker-compose.yml

version: "3"

services:
  mysql:
    image: mysql:latest
    container_name: mysql
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
    ports:
      - 3306:3306
    
volumes:
  db_data:

Následně stačí zadat příkaz docker-compose up.

Číst dál

Update prohlížeče Brave na Linux Mint

Postup je podobný instalaci, která je popsána na oficiálních stránkách.

sudo apt install curl

sudo curl -fsSLo /usr/share/keyrings/brave-browser-archive-keyring.gpg https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/brave-browser-archive-keyring.gpg] https://brave-browser-apt-release.s3.brave.com/ stable main"|sudo tee /etc/apt/sources.list.d/brave-browser-release.list

sudo apt update

Rozdíl je v poslením kroku, kdy se zadá:

sudo apt install --only-upgrade brave-browser

Ve výpisu v konzoli je pak možné vidět následující:

Preparing to unpack .../brave-browser_1.56.20_amd64.deb ...
Unpacking brave-browser (1.56.20) over (1.30.86) ...
Setting up brave-browser (1.56.20) ...

Sonar – S3749

Sonar – Annotate this member with "@Autowired", "@Resource", "@Inject", or "@Value", or remove it

V případě třídních proměnných.

Pokud je třída, kterou touto cestou voláte, @Component, @Controller,@Service a nebo @Repository pak nic nebrání tomu přidat odpovídající anotaci. Jsou apriorně singleton. Pokud se o ně nejedná, tak cesta vede skrze „static“.

Například:

private static DateTimeFormatter msgDateFormat = DateTimeFormatter.ofPattern("MMddHHmmss").withZone(ZoneId.of("GMT"));

Pozor u použití u třídy Random. Ta sama o sobě není statickou, zachovává „stav“, který zahrnuje informaci o tom, kde se v dané sequenci nachází. Takže její použití jako „static“ z ní udělá na úrovni třídy de facto singleton a je otázka jestli to odpovídá v konkrétním případě požadovanému chování/generování náhodných čísel.

Smazání všech lokálních Git větví

Příkaz git branch zobrazí seznam všech lokálních větví.

Příkaz git branch -r zobrazí seznam všech remote (vzdálených) větví

Příkaz git brach -d nazev_vetve smaže uvedenou lokální větev (pokud již byla mergnutá)

Příkaz git branch -D nazev_vetve smaže uvedenou lokální větev (bez ohledu na její merge status, je to zkratka pro --delete --force)

Smazání všech větví s výjimkou větve s názvem dev se provede příkazem

git branch | grep -v "dev" | xargs git branch -d

Anotace javax.persistence.SequenceGenerator

Anotace @SequenceGenerator se používá k určení generátoru primárních klíčů pro tabulku. Na tento generátor je odkazováno z anotace @GeneratedValue.

name – Název generátoru, který musí být unikátní.
sequenceName – Název sekvence v databázi. Je to sekvence, která již v databázi existuje.
allocationSize – Musí být stejná jako hodnota „auto incerement“ sekvence v databázi.

import cz.vitfo.entity.CustomerEntity.Companion.GENERATOR_NAME
import cz.vitfo.entity.CustomerEntity.Companion.SEQUENCE_NAME
import cz.vitfo.entity.CustomerEntity.Companion.TABLE_NAME
import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.GenerationType
import javax.persistence.Id
import javax.persistence.SequenceGenerator
import javax.persistence.Table

@Entity
@Table(name = TABLE_NAME)
@SequenceGenerator(name = GENERATOR_NAME, sequenceName = SEQUENCE_NAME, allocationSize = 1)
class CustomerEntity(

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = GENERATOR_NAME)
    var id: Long

) {
    companion object {
        const val TABLE_NAME = "t_customer"
        const val SEQUENCE_NAME = "${TABLE_NAME}_id_seq"
        const val GENERATOR_NAME = "${SEQUENCE_NAME}_gen"
    }
}

Root oprávnění v docker kontejneru

Docker nabízí příkaz exec, který spustí zadaný příkaz v běžícím kontejneru. Pokud tedy máme kontejner s názvem postgres, který obsahuje PostgreSQL databázi, pak příkazem docker exec -it postgres psql -U postgres spustíme v kontejneru postgres příkaz psql s paramatrem -U (uživatelské jméno) postgres. Tím se přihlásíme k databázi běžící v kontejneru.

Někdy můžeme chtít v kontejneru vykonávat nějakou činnost (např. vytvářet složky), k čemuž ale občas potřebujeme root oprávnění. Takto se vytvoříme složku realms v kontejneru s názvem keycloak. Do kontejneru se přihlásíme jako root: docker exec -u 0 keycloak bash -c "mkdir realms"

MongoDB shell

Shell pro MongoDB se nazývá mongosh. Dříve se používala shell mongo, která byla odstraněna ve verzi MongoDB 6.0. Pokud se pokusíte zavolat mongo a dostanete chybu bash: mongo: command not found, mongo shell již na vašem systému není k dispozici. Pokud máte běžíci docker kontejner mongo, dovnitř kontejneru se dostanete pomocí docker exec -it mongo bash. K databázi se pak připojíte příkazem mongosh -u username -p password. Zobrazí se vám verze mongosh i mongo databáze.

Using MongoDB:		6.0.2
Using Mongosh:		1.6.0

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

Shell můžete ukončit několika způsoby:
Napište .exit, exit, nebo exit().
Napište quit nebo quit().
Stiskněte Ctrl + D.
Stiskněte dvakrát Ctrl + C.

Mongo quickstart

Mongo databáze ukládá záznamy jako dokumenty (documents), což je obdoba záznamů (řádků) v klasické SQL databázi. Dokumenty jsou v tak zvaných kolekcích (collections), což je obdoba tabulek v klasické SQL databázi. Databáze tedy obsahuje jednu nebo více kolekcí, které obsahují dokumenty. Sloupec (column) v SQL databázi zhruba odpovídá poli (field) v Mongu. Velmi hezky zpracované porovnání příkazů a názvosloví mezi Mongem a SQL je zde.

Číst dál