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ál

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ál

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ál

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ál

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ál

Instalace Eclipse IDE na Lubuntu

Lubuntu je distribuce Linuxu určená pro starší počítače. Více o tomto operačním systému si můžete přečíst zde. Jelikož mám doma starší jednoprocesorový počítač AMD Athlon(tm) 64 Processor 3000+ s 2 GB RAM a 160 GB HDD rozhodl jsem se vyzkoušet, jak se na tomto počítači bude programovat v Javě. Potřeboval jsem vývojové prostředí a rozhodl jsem se pro Eclipse IDE. Instalace operačního systému Lubuntu je popsána zde a nebudu se jí v tomto příspěvku dále věnovat.

Nejdříve jsem si musel nainstalovat Javu.

sudo apt-get install default-jdk

Následně jsem si stáhnul Eclipse IDE z https://eclipse.org/downloads/eclipse-packages/. Vybral jsem si 32 bitovou verzi Eclipse IDE for Java EE Developers.

lubuntu_eclipse_neon_download

Číst dál

Rozbrazování čísel řádků v Idea IDE

Ve výchozím nastavení Idea IDE nezobrazuje čísla řádků. Pokud potřebujete čísla řádků v aktuálním souboru stačí kliknout pravým tlačítkem myši na levý okraj a z nabídky vybrat „Show Line Numbers“.

idea_cisla_radku

Pokud ale potřebujete vidět číslování vždy, je třeba změnit nastavení: File -> Settings… -> Editor -> General -> Appearance -> a zaškrtnout „Show Line Numbers“.

idea_cisla_radku_02


Zdroj: stackoverflow.com/…-numbers-in-intellij