Instalace PostgreSQL a pgAdmin3 na Lubuntu

Instalace PostgreSQL i administrativního grafického rozhraní pro tuto databázi pgAdmin3 je zcela jednoduchá. Nejdříve nainstalujeme databázi PostgreSQL příkazem (v tomto případě instaluji PosgreSQL ve verzi 9.5):

sudo apt-get install postgresql-9.5

Následně nainstalujeme pgAdmin3 příkazem:

sudo apt-get install pgadmin3

Nyní můžeme pgAdmin3 spustit.

pgadmin_spusteni pgadmin_prvni_spusteni

Pro připojení ale budeme potřebovat heslo pro uživatele „postgres“ (tento uživatel je vytvořen při instalaci PostgreSQL). Pokud heslo nevíte, přihlásíme se do psql (konzolová aplikace pro práci s PostgreSQL) uživatelem „postgres“ .

Číst dálInstalace PostgreSQL a pgAdmin3 na Lubuntu

Setřízení seznamu řetězců dle locale v Javě

Pro seřazení seznamu se v Javě používá třída java.util.Collections a její metoda sort(). Tato metoda je přetížená a má možnost jako paramer mít objekt implementující Comparator, což je rozhraní s metodou compare(objekt_1, objekt_2). Jako Comparator lze tedy použít i instanci třídy Collator, která rozhraní Comparator implementuje. Výhodou Collatoru je to, že umožňuje řetězce porovnávat dle locale. Pokud budeme chtít správně porovnávat a řadit řetězce s českou diakritikou, je třeba použít Collator a české locale.

import java.text.Collator;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Locale;

public class AppStringCompare {
	public static void main(String[] args) {
		List<String> list = Arrays.asList("zelí", "mrkev", "česnek", "petržel", "řepa");
		Collator collator = Collator.getInstance(new Locale("cs", "CZ"));
		Collections.sort(list, collator);
		System.out.println(Arrays.toString(list.toArray()));
	}
}

Výsledek

[česnek, mrkev, petržel, řepa, zelí]

Upgrade Lubuntu z 14.04 LTS na 16.04 LTS

Lubuntu, tak jako Ubuntu, nabízí LTS verze. LTS znamená Long Time Support a jedná se o verzi, pro kterou jsou dlouhodobě vydávány opravy a updaty. Více o tomto tématu se dozvíte v tomto příspěvku. Úžasnou věcí je, že můžete svůj systém jednoduše upgradovat ze starší LTS verze na novou, aniž byste museli provádět novou instalaci systému. Vše je uživatelsky velmi přívětivé.

Správce aktualizací vás na možnost upgrade upozorní.

upgrade_lubunto_16-04

Pokud se pro upgrade rozhodnete, nejdříve si nainstalujte všechny aktualizace, které vám Správce aktualizací nabízí. Pokud máte, klikněte na Aktualizovat.

Číst dálUpgrade Lubuntu z 14.04 LTS na 16.04 LTS

DataSource pro JobRepository

JobRepository je používána pro základní CRUD (Create, Read, Update, Delete) operace nad určitými objekty (domain objekty) frameworku Spring Batch. Jednoduše řečeno, Spring Batch si zde ukládá potřebné informace o jobech (Job) a jednotlivých krocích jobu (Step). V případě, že tyto informace nepotřebujeme, nabízí Spring Batch in-memory implementaci pomocí mapy. Tento způsob jsem zatím používal ve všech předchozí Spring Batch příkladech.

<bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
	<property name="transactionManager" ref="transactionManager" />
</bean>

V případě, že chceme batch objekty ukládat, je potřeba nadefinovat data source. Zde je příklad pro databázi PostgreSQL.

<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<beans:property name="driverClassName" value="org.postgresql.Driver" />
	<beans:property name="url" value="jdbc:postgresql://localhost:5432/database" />
	<beans:property name="username" value="username" />
	<beans:property name="password" value="password" />
</beans:bean>

Za database, username, password zadejte validní data.

Pokud máte novou databázi, určitě v ní nebudete mít vytvořeny potřebné tabulky:

  • BATCH_STEP_EXECUTION
  • BATCH_JOB_EXECUTION_CONTEXT
  • BATCH_JOB_EXECUTION_PARAMS
  • BATCH_JOB_INSTANCE
  • BATCH_JOB_EXECUTION
  • BATCH_STEP_EXECUTION_CONTEXT

spring_batch_tables

Číst dálDataSource pro JobRepository

Spring, properties a @Value anotace

Spring framework umožňuje jednoduše načítat hodnoty z properties souboru a to pomocí anotace @Value. Nejjednodušší je vše ukázat na příkladu.

Struktura projektu

│   pom.xml
│
├───src
│   ├───main
│   │   └───java
│   │       └───cz
│   │           └───vitfo
│   │               └───spring
│   │                       App.java
│   │                       MyClass.java
│   │
│   ├───resource
│   │       app.properties
│   │       beans.xml

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>cz.vitfo</groupId>
	<artifactId>spring01</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>spring01</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<spring-version>4.3.5.RELEASE</spring-version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring-version}</version>
		</dependency>
	</dependencies>
</project>

Číst dálSpring, properties a @Value anotace

Nastavení verze závisloti v maven properties

Závislosti v souboru pom.xml jsou uváděny včetně verze <version></version>.

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.3.5.RELEASE</version>
</dependency>

Napřiklad při použití Spring frameworku je pravděpodobné, že závislostí bude řada a velké množství z nich bude používat stejnou verzi. Je pak vhodné mít configuraci verzí na jednom místě a pokud mají závislosti stejnou verzi, tak je sdílet. Toho lze docílit pomocí elementu <properties></properties> v pom.xml a použití ${...}. V následujícím příkladu budu mít tři závislosti a z toho dvě budou mít stejnou verzi.

<properties>
	<spring-version>4.3.5.RELEASE</spring-version>
	<spring-batch-version>3.0.7.RELEASE</spring-batch-version>
</properties>

<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
		<version>${spring-version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>${spring-version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework.batch</groupId>
		<artifactId>spring-batch-core</artifactId>
		<version>${spring-batch-version}</version>
	</dependency>
</dependencies>

Do elementu <properties></properties> se vloží element s verzí a ve <version></version> se pak na něj odkazuje pomocí názvu uvedeného v ${...}.

Česká klávesnice a Eclipse IDE

Některé znaky nelze v Eclipse IDE napsat v případě, že používáte českou klávesnici. Jedním z těchto znaků je {. Je to způsobeno tím, že tento znak se na české klávesnici píše pomocí pravého Alt + B. Tato klávesová zkratka má v Eclipse IDE přiřazenu akci „Skip All Breakpoints“ (mimochodem je to totéž jako Ctrl + Alt + B). Pokud chcete Alt + B používat pro psaní { je třeba tuto klávesovou zkratku odebrat (unbind): Window -> Preferences -> General -> Keys -> napište Alt+B -> vyberte odpovídající klávesovou zkratku -> Unbind Comand -> OK.

unbind_command

Spring Boot a Cannot determine embedded database driver class for database type NONE

Spring Boot razantně zjednodušuje práci s frameworkem Spring, hlavně konfigurační část. Přidáním pár závislostí do Mavenu (popřípadě vygenerováním projektu v Spring Initializr) máte připravenou a funkční kostru projektu. I při tomto uživatelsky přívětivém postupu se může objevit zádrhel. Tím může být spuštění kostry vytvořeného projektu, kdy dostanete následující chybovou hlášku:

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2017-01-12 19:31:16.365 ERROR 43892 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Cannot determine embedded database driver class for database type NONE

Action:

If you want an embedded database please put a supported one on the classpath. If you have database settings to be loaded from a particular profile you may need to active it (no profiles are currently active).

Spring Boot vám rovnou nakonfiguruje databázi pro váš projekt (pokud databázi chcete používat). Konfiguraci ale může provést pouze pro integrované databáze typu H2, HSQL či Derby. Pokud chcete používat jinou databázi, je třeba uvést alespoň základní konfiguraci do application.properties souboru. Pokud dostanete výše uvedenou chybu, může to mít několik příčin:

Číst dálSpring Boot a Cannot determine embedded database driver class for database type NONE

Spring Batch a Java konfigurace

Doposud jsem v příspěvcích k Spring Batch používal xml konfiguraci. Spring ale umožňuje též konfigurovat pomocí java tříd. V tomto příspěvku ukáži jednoduchý Spring Batch projekt, který bude používat java config. Projekt bude stejný jako v tomto příspěvku, pouze bude místo xml používat java konfiguraci.

Struktura projektu

│   pom.xml
│
└───src
    ├───main
    │   └───java
    │       └───batch
    │               AppConfig.java
    │               Employee.java
    │               ExecuteBatchJob.java
    │               ResultWriter.java
    │
    └───resources
            reportCS.csv

AppConfig.java předstaje java třídu obsahující konfiguraci.

Číst dálSpring Batch a Java konfigurace

Načtení csv souboru pomocí FlatFileItemReader ve Spring Batch

Tento příspěvek volně navazuje na článek Spring Batch 3. díl, ve kterém byla ukázána práce s chunk a definovanými objekty reader, processor, writer. V dnešním příspěvku se seznámíme s tím, jak načítat data z .csv souboru pomocí FlatFileItemReaderu. FlatFileItemReader je ItemReader, který čte řádky ze vstupu. Vstup je určen elementem <property name="resource" value="classpath:reportCS.csv"/>. V tomto případě se bude číst ze souboru reportCS.csv, který se nachází na classpath.

Prostý databázový soubor (též plochý databázový soubor, anglicky flat file database) je jednoduchá databáze (většinou tabulka) uložená v textovém souboru ve formě prostého textu. Takový soubor může mít příponu například .txt, .ini, .conf, ale i .dbf apod. Zdroj: cs.wikipedia.org

Zde je ukázka FlatFileItemReaderu.

<bean id="csvFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">
	<property name="resource" value="classpath:reportCS.csv"/>
	<property name="encoding" value="UTF-8"/>
	<property name="linesToSkip" value="1"/>
	<property name="lineMapper">
		<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
			<property name="lineTokenizer">
				<bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
					<property name="names" value="Name,Surname,Location,Job,Earning"/>
				</bean>
			</property>
			<property name="fieldSetMapper">
				<bean class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
					<property name="prototypeBeanName" value="employee"></property>
				</bean>
			</property>
		</bean>
	</property>
</bean>

resource: zdroj dat pro čtení
encoding: kódování zdrojového souboru
linesToSkip: nastaví počet řádků souboru, které se mají přeskočit před začátkem čtení
lineMapper: nastaví line mapper, mapování načteného řádku

Číst dálNačtení csv souboru pomocí FlatFileItemReader ve Spring Batch