Vytvoření tabulek pro Spring Batch

Spring Batch používá 6 tabulek, pro ukládání dat:

batch_job_execution
batch_job_execution_context
batch_job_execution_params
batch_job_instance
batch_step_execution
batch_step_execution_context

Tyto tabulky vytvoříte přidáním následujícího řádku do souboru application.properties:

spring.batch.initialize-schema=always

Zdroj: stackoverflow.com/…-auto-create-batch-table

 

Rozdíly mezi Chrome a Chromium pro uživatele Linuxu

Chromium je open source projekt a je základem pro Chrome, které má navíc další proprietální fíčury. Hlavním rozdílem pro uživatele Linuxu je ale to, že Chrome je třeba instalovat ze staženého .deb/.rpm balíčku, kdežto Chromium je možné nainstalovat pomocí snap.

sudo snap install chromium

Více o rozdílech mezi těmito dvěma prohlížeči naleznete v tomto článku.

Instalace Linuxu na Dell Inspiron 15 7000

Konfigurace počítače
Procesor Intel Core i7-8565U (1.8GHz, TB 4.6GHz, HyperThreading); 16GB RAM DDR4; 15.6″ IPS Full HD displej (1920×1080 bodů); grafika NVIDIA GeForce MX250 2GB GDDR5; disk 512GB SSD M.2 PCIe NVMe

Původní představa byla, že si na uvedený notebook nainstaluji Linux Ubuntu. Vytvořil jsem si instalační USB programem rufus dle tutoriálu na stránkách Ubuntu a spustil instalaci.

Problém první
Instalace se zasekla (počítač zamrzl) v průvodci nastavením někde v části, kde se volí oblast. Počítač jsem musel natvrdo vypnout a po spuštění jsem dostal černou obrazovku s chybou

Číst dálInstalace Linuxu na Dell Inspiron 15 7000

Instalace Linuxu z USB

Nedávno jsem měl příležitost zkoušet instalovat různé distribuce Linuxu (Fedora, Mint, Ubuntu) z USB disku. Zde jsou mé dojmy:

Fedora má vlastní program (Fedora Media Writer), který bootovatelné USB vytvoří.

Ubuntu na svých stránkách v tutoriálu o instalaci doporučuje vytvořit USB pomocí programu rufus. Ten není třeba instalovat.

Číst dálInstalace Linuxu z USB

Nelze spustit Tomcat 9

Při spuštění Tomcatu pomocí service tomcat9 start jsem dostával následující chybu:

WARNING: Unable to load server configuration from [/opt/tomcat9/conf/server.xml]
java.io.FileNotFoundException: /opt/tomcat9/conf/server.xml (Permission denied)
...
SEVERE: Cannot start server, server instance is not configured

Ani spuštění jako root, nebo změna chmod na souboru server.xml nepomohla. Nakonec stačilo přejít do složky se spouštěcími skripty .../tomcat9/bin a spustit startup.sh.

Java 9 Flow.Subscriber and Flow.Publisher

Java 9 představila Flow API, které umožňuje reaktivní programování. V tomto příspěvku vytvořím aplikaci, která se bude skládat z jednoho publishera, který vytváří data a dvou subscriberů, kteří data zpracovávají. Jeden ze subscriberů je dostatečně rychlý a zvládá data zpracovávat rychleji, než je publisher produkuje, druhý subscriber je výrazně pomalejší.

Číst dálJava 9 Flow.Subscriber and Flow.Publisher

Java 10 a novinka var

Lokální proměnné je od Javy 10 možné deklarovat s použitím klíčového slova var. Přemýšlel jsem, k čemu tato změna je a začal jsem googlit. Narazil jsem na názor, že var má snížit ukecanost (verbosity) Javy. Pokud máte lokální proměnnou, můžete ji deklarovat takto:

var name = "John";
var age = 25;

místo

String name = "John";
int age = 25;

Nevidíte v tom žádnou výhodu? Moc psaní jste neušetřili. Souhlasím. A co teď?

List<Map<String, Set<MyClass>>> cosi;
var cosi;

Zde již nějaké to psaní ušetříme, ALE. Pokud v kódu narazím na takovouto proměnnou a budu s ní pracovat, pravděpodobně si stejně zjistím, jakého je typu. Takže místo toho, abych to rovnou viděl, musím se prokliknout někam, kde je daný typ uveden např. CosiClass.getCosi();. A pokud používáte nástroje svého IDE, pravděpodobně tam je možnost, nechat si přiřadit návratovou hodnotu volání do proměnné (v Idea IDE to je Ctrl + Alt + V), takže to stejně nepíši. Trochu mi to připomíná debaty na téma psaní getterů a setterů, kdy některé jazyky tyto metody generují automaticky na základně specifické syntaxe. V Javě je možné použít knihovnu Lombok a nebo nechat své IDE tyto metody vygenerovat. Asi teprve čas ukáže, zda se tato novinka mezi vývojáři uchytí.

Poznámka ke Kotlinu
Kotlin má var (od variable) a val (od value), kdy val je finální. Místo final String name napíšete val name.

fun main(args: Array) {
    var str1 = "Ahoj"
    val str2 = "Ahoj"

    str1 = "Nazdar"
//    str2 = "Nazdar" - Chyba: value cannot be reassigned
}

Doporučuji k přečtení tyto články:
beyondjava.net/should-you-embrace-var-in-java-10
openjdk.java.net/projects/amber/LVTIstyle.html

Chyba relation „hibernate_sequence“ does not exist

Tuto chybu jsem dostal při použití Spring Data se Spring Boot a databází PostgreSQL. Takto vypadala třída definující entity.

@Entity
@Table(name = "t_login")
@SequenceGenerator(name = "t_login_id_seq_gen", sequenceName = "t_login_id_seq", allocationSize = 1)
data class Login(
        @Id
        @GeneratedValue
        var id: Long = 0,

        @Column
        var token: UUID = UUID.randomUUID()
)

Pro id bylo třeba více specifikovat @GeneratedValue:

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "t_login_id_seq_gen")

Tím se problém vyřešil.