MICRO-BATCH-SERVICES MIT SPRING BOOT

Ähnliche Dokumente
Dennis Schulte / Tobias Flohre codecentric AG. Enterprise Java Batch mit Spring

Architektur im Kontext der Cloud: Patterns und Best Practices 62. Logging. Auswirkung moderner Architektur auf den Betrieb 32

Continuous Everything

Build Management Tool?

Operation am offenen Herzen

Schritt 4: Hallo Enterprise Bean

Build Management Tool

Gradle 2.0. Ab in den siebten Himmel 34 Best Practices: WildFly-8- Installationen verwalten 40. Multi-Browser-Tab-Support 50

Vernetzte Gebäudereinigung - Aufbau einer Cloud-Lösung

Build Management Tool?

Referat. Continuous Integration. mit Maven und Jenkins. Benjamin Keeser. Hochschule für angewandte Wissenschaften München FB 07 Informatik (Master)

Continuous Integration mit GitLab CI. Christine Koppelt Philipp Haußleiter GUUG-Frühjahrsfachgespräch 1. März 2018

Platform as a Service (PaaS) & Containerization

OSGi. The Next Generation Java Service Platform. SOA - The Java Way or My classpath is killing me. Michael Greifeneder

Buildsystem. Maven & Scons. Controls Entwicklungsforum Januar 2012

Enterprise JavaBeans Überblick

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Erhöhe den Nutzen deines Dienstes

Serverless Computing mit AWS-Lambda

Der Weisheit letzter Schluss:

Enterprise JavaBeans Überblick: 8. Test-Driven Development. 8.1 Einleitung 8.2 Beispiel 8.3 Anwendung mit Eclipse und dem JBoss Application Server

DOTS - reloaded. EntwicklerCamp René Winkelmeyer midpoints GmbH

Tobias Flohre / Dennis Schulte codecentric AG. Spring Batch Performance und Skalierbarkeit

Dominik Helleberg inovex GmbH. Auf Augenhöhe mit Android Studio und Gradle

Hinter den Kulissen: Die Magie von Spring Boot

Continuous Integration mit GitLab CI Christine Koppelt Open-Source-Treffen, 26. Januar 2018

Die Magie von MBeans und JMX. DOAG 2014 Andreas Chatziantoniou - Foxglove-IT BV

CI von Eclipse RCP Anwendungen mit Gradle/Jenkins

Brownbag Zieht den Helm auf

Continuous Integration ist nicht schwer Hudson, Plugins, Skripte umrühren und fertig

Das neue Android Build System

Continuous Delivery mit OpenShift, 2nd Edition

Maven 2.0. DRV Jahrestagung Java Würzburg Rainer Vehns, codecentric GmbH codecentric GmbH

CentOS 7 Secure And Portable Containers Made Easy Jürgen Brunk Köln,

Operation am offenen Herzen

Pre-tested commit 2.0 mit Gerrit und Jenkins

Agenda. Anwendungsfälle. Integration in Java

Continuous Integration in JBF. Johannes Kellner

Eclipse, Spring und OSGi 1

Programmieren II. Exkurs: Apache Maven. Institut für Angewandte Informatik. KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft

Docker für Java Entwickler

Schedulingund Thread-Ausführer

Build-Pipeline mit Jenkins

Aspektorientierte Middleware Florian Wagner

Gerrit und Jenkins ein Traumpaar für Pre-Tested Commit

Teile und herrsche: Integration und Automatisierung der Tools im Entwicklerstack

Continuous Integration (CI) Workshop

FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen

Consultant & Geschäftsführer, enpit consulting OHG ugb@enpit.de

CamelCaseCon 2011 Vortrag von Stefan Glase am Statische Code-Analyse für Groovy & Grails mit CodeNarc

Ohne Build geht's besser: Makeloses Java mit dem z 2 -Environment. Henning Blohm

Backend as a Service: Neues Geschäftsfeld für die Cloud 64. NoSQL mit Cassandra. Skalierungssieger auf der ganzen Linie 48

Programmieren in Java

Make-loses Java für mehr Produktivität: Das z 2 -Environment. Henning Blohm

Enterprise Java, Services und Systemintegration. Java EE Quo Vadis? Vorstellung. Software-Architekt, Entwickler und Trainer Fachliche Schwerpunkte

Renée Bäcker. Perl $foo Magazin

Java Batch Der Standard für's Stapeln

It's time to rethink Datenbank-Design in der schönen neuen Welt

Inhaltsverzeichnis. 2.2 Grundlagen der UML Zusammenfassung... 53

Projektgruppe. Thomas Kühne. Komponentenbasiertes Software Engineering mit OSGi

Spring Dynamic Modules for OSGi Service Platforms

Continuous Delivery mit OpenShift

APEX OOS TOOLS & HELFER

Gerrit und Jenkins ein Traumpaar für Pre-Tested Commit

v i r t u a l 7 G m b H Consulting- und Softwarepartner Unternehmergeführt 1996 gegründet 85 Mitarbeiter 1 Team aus Spezialisten W E R W I R S I N D

Integration von Java Legacy Code in die Fusion Middleware 11 mittels des SOA Suite Spring Components

Eine Einführung, aktuell zur Version An imprint of Pearson Education

Katello / Pulp / Candlepin

Martin. Spiller. Maven 3. Konfigurationsmanagement mit Java

Mit dem Google-Web-Toolkit moderne Web-Anwendungen entwickeln

VAADIN, SPRING BOOT & REST

Automatisierter Java EE Entwicklungs-Lifecycle mit WebLogic Server 12c. Robin Müller-Bady Systemberater, Oracle Deutschland

Operation am offenen Herzen

... Created by Michael Kirsch & Beat Rossmy

Model-Driven Development in der Praxis. mit objectif. Herzlich willkommen

Daniel Tschan Technischer Leiter. Continuous Delivery mit OpenShift

Softwareprojekte mit Kultur

Modulare Anwendungen und die Lookup API. Geertjan Wielenga NetBeans Team Deutschsprachige Überarbeitung, Aljoscha Rittner NetBeans Dream Team

Continuous Delivery. für Java Anwendungen. Axel Fontaine Software Development Expert

Docker für Entwickler

Dr. Roland Huß, ConSol* Docker für Java-Entwickler

AVID-Übung 3. EJB mit JBoss und Eclipse. 17. Juni Andreas I. Schmied Abteilung Verteilte Systeme Projektgruppe AspectIX

Was kann man in APEX automatisieren?

Vorbereitung auf die Prüfung. Arthur Zaczek

FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen. Sommersemester Michael Theis, Lehrbeauftragter 1

Am Ziel angekommen? Über Ant und Maven zu SBT und Gradle. Andreas Hartmann Dr. Halil-Cem Gürsoy adesso AG

Enterprise Java, Services und Systemintegration. Zu neuen Ufern. Jakarta EE & MicroProfile. Vorstellung

Modellierung CORBA-basierter Anwendungssysteme mit der UML

Build Management. Präsentation von Daniel Mies

Eclipse in der Java-Entwicklung

Virtual Unified Environments Infrastructure Service Installation und Lifecycle im Oracle Produktumfeld

OSGi: Toolunterstützung und Softwareentwicklungsprozess

Neue Wege mit Contao 4

JAX-RS 2.0 REST mit Java EE 7

Vaadin 8 What s new Jakob Magun, Benjamin Schupp

Gemeinsam mehr erreichen.

Transkript:

MICRO-BATCH-SERVICES MIT SPRING BOOT Ein Praxisbericht

Tobias Flohre Düsseldorf @TobiasFlohre www.github.com/tobiasflohre blog.codecentric.de/en/author/tobias.flohre tobias.flohre@codecentric.de www.codecentric.de

WORUM GEHT ES? So könnte die schöne neue Welt sein!

WORUM GEHT ES? So könnte die schöne neue Welt sein! So ist die neue Welt! Micro-Batch-Services

WORUM GEHT ES? So könnte die schöne neue Welt sein! So ist die neue Welt! Micro -Batch- Services Tools, Methoden, Frameworks, Vorgehen

AGENDA - Motivation / Problemstellung - Entwicklung - Build - Deployment - Monitoring - Logging

BATCH-ARCHITEKTUR Servlet Container Cron-Job Anwendung HTTP Endpoint Scheduler Batch Application Workflow-System Logs Job- Metadaten 27.03.15 7

BATCH-META-FRAMEWORK Transaktionssicher Metrics Summen Zähler Deployed Jobs Job-Start Job-Execution- Details Status Test-Ressourcen Test- Unterstützung In-Memory Laufende Jobs HTTP-Endpoints Job-Stop Logfile / Protokoll Kerndaten des Joblaufs Protokoll Einheitliches Format Revisionssichere Ablage Logging Thread-Local Logfile pro Job-Execution

MOTIVATION / PROBLEMSTELLUNG Servlet Container HTTP Endpoint Anwendung Batch Application Job Job Job Job Job Job Job Job Job Logs Sparte A Job- Metadaten Problem! Deployment -> Test aller Jobs Jobs sind schwer zu testen Mehrere Anwendungen! Puh... Nee... Anträge, Aufsetzen, git, Build, CI, Properties für Stages, Application Server Deployment, Monitoring, Logging 27.03.15 9

MOTIVATION / PROBLEMSTELLUNG Ein Job pro Anwendung! Voraussetzungen schaffen! Aufsetzen des Projekts muss trivial sein Build-/CI-Jobs nicht manuell erzeugen Application Server loswerden Deployment vereinfachen Monitoring und Logauswertung von vielen Anwendungen ermöglichen

ENTWICKLUNG Spring Boot makes it easy to create stand-alone, productiongrade Spring based Applications that you can "just run".

ENTWICKLUNG Spring Boot Starter liefern Dependencies liefern Konfiguration einfach erweiterbar Spring Boot makes it easy to create stand-alone, productiongrade Spring based Applications that you can "just run".

ENTWICKLUNG Embedded Servlet Container Start per main-methode Startfähiges Fat-Jar java jar app.jar Spring Boot makes it easy to create stand-alone, productiongrade Spring based Applications that you can "just run".

ENTWICKLUNG Monitoring Properties Remote Shell CRaSH Spring Boot makes it easy to create stand-alone, productiongrade Spring based Applications that you can "just run".

ENTWICKLUNG - spring-boot-starter-batch - Batch-Ausführung standalone - Lösung: eigener Spring Boot Starter - Infrastruktureller Code wird geteilt https://github.com/codecentric/spring-boot-starter-batch-web <dependency> <groupid>de.codecentric</groupid> <artifactid>spring-boot-starter-batch-web</artifactid> <version>1.3.4.release</version> </dependency>

ENTWICKLUNG Transaktionssicher Metrics Summen Zähler Deployed Jobs Job-Start Job-Execution- Details Status Test-Ressourcen Test- Unterstützung In-Memory Laufende Jobs HTTP-Endpoints Job-Stop Logfile / Protokoll Kerndaten des Joblaufs Protokoll Einheitliches Format Revisionssichere Ablage Logging Thread-Local Logfile pro Job-Execution

ENTWICKLUNG 1. Wähle eine Basis aus existierenden Spring Boot Startern spring-boot-starter-web spring-boot-starter-batch spring-boot-starter-jdbc spring-boot-starter-actuator

ENTWICKLUNG 2. Eigene Konfiguration und Auto-Configuration META-INF/spring.factories org.springframework.boot.autoconfigure.enableautoconfiguration= de.codecentric.batch.configuration.batchwebautoconfiguration

ENTWICKLUNG 3. Konfigurierbarkeit durch Properties @Value("${batch.max.pool.size:5}") private int maxpoolsize; @Bean public TaskExecutor taskexecutor() { ThreadPoolTaskExecutor taskexecutor = new ThreadPoolTaskExecutor(); taskexecutor.setmaxpoolsize(maxpoolsize); taskexecutor.afterpropertiesset(); return taskexecutor; }

ENTWICKLUNG 4. Erweiterbarkeit durch überschreibbare Default- Implementierungen @ConditionalOnMissingBean(BatchConfigurer.class) @Configuration public class TaskExecutorBatchConfigurer implements BatchConfigurer {} public interface BatchConfigurer { JobRepository getjobrepository() throws Exception; PlatformTransactionManager gettransactionmanager() throws Exception JobLauncher getjoblauncher() throws Exception; JobExplorer getjobexplorer() throws Exception; }

ENTWICKLUNG 5. Abhängigkeit von Klassenpfad und Ressourcen @ConditionalOnClass(name = "javax.persistence.entitymanagerfactory") @ConditionalOnMissingBean(BatchConfigurer.class) @Configuration protected static class JpaBatchConfiguration {} @ConditionalOnMissingClass @ConditionalOnResource @ConditionalOnWebApplication @ConditionalOnExpression @ConditionalOnProperty

ENTWICKLUNG Voraussetzungen schaffen! Aufsetzen des Projekts muss trivial sein Build-/CI-Jobs nicht manuell erzeugen Application Server loswerden Deployment vereinfachen Monitoring und Logauswertung von vielen Anwendungen ermöglichen

BUILD Ziel 1: Build-/CI-Jobs nicht manuell erzeugen Ziel 2: Ein Job für alles -> Build, Release, Deployment

BUILD Build now bei SCM Commit mvn clean package Release manuell mvn build-helper:parse-version versions:set DnewVersion=${...} mvn clean package mvn deploy mvn scm:tag Promotion manuell Deployment auf Stages -> Trigger eines deployapplication-jobs

BUILD trigger job create repo Job DSL Plugin Seed-Job Job, der Job erzeugt 27.03.15 25

ENTWICKLUNG Voraussetzungen schaffen! Aufsetzen des Projekts muss trivial sein Build-/CI-Jobs nicht manuell erzeugen Application Server loswerden Deployment vereinfachen Monitoring und Logauswertung von vielen Anwendungen ermöglichen

DEPLOYMENT Ziel: Deployment vereinfachen

DEPLOYMENT Build erzeugt RPM (Red Hat Package Manager) Maven RPM Plugin Startskript + Spring Boot Fat Jar Installationslogik (<preinstallscriptlet>) Properties umgebungsabhängig aus SCM Alternative: Spring Cloud Config Java Property- Resolver deployapplication Job ermittelt Server für Stage ssh -> yum install <artefakt> Spring Boot Anwendung 27.03.15 28

ENTWICKLUNG Voraussetzungen schaffen! Aufsetzen des Projekts muss trivial sein Build-/CI-Jobs nicht manuell erzeugen Application Server loswerden Deployment vereinfachen Monitoring und Logauswertung von vielen Anwendungen ermöglichen

MONITORING Spring Boot Actuator + Spring Boot Admin: Live-Demo

LOGGING Anwendung Anwendung Anwendung Anwendung ElasticSearch + Logstash + Kibana

LOGGING

ENTWICKLUNG Voraussetzungen schaffen! Aufsetzen des Projekts muss trivial sein Build-/CI-Jobs nicht manuell erzeugen Application Server loswerden Deployment vereinfachen Monitoring und Logauswertung von vielen Anwendungen ermöglichen

RESSOURCEN https://github.com/codecentric/spring-boot-starter-batch-web https://github.com/codecentric/spring-boot-admin https://blog.codecentric.de/en/2014/11/extending-springboot-five-steps-writing-spring-boot-starter/ https://blog.codecentric.de/2015/01/continuous-delivery-furmicroservices-mit-jenkins-und-dem-job-dsl-plugin/ https://blog.codecentric.de/2014/10/log-management-furspring-boot-applikationen-mit-logstash-elastichsearch-kibana/

FRAGEN? Tobias Flohre Merscheider Straße 1 42699 Solingen tobias.flohre@codecentric.de www.codecentric.de blog.codecentric.de www.meettheexperts.de 27.03.15 35