Devoxx Poland 2019
from Monday 24 June to Wednesday 26 June 2019.
I studied computer science in Jena, specialized to databases and information systems. During my studies I started working at the University Hospital Jena at the Service Management Department with a focus on hardware rollouts and software deployments. 6 years ago I got back to software development. These days I'm developing services with Spring Boot, messaging systems and a lot of DevOps tasks.
I'm also active member of the freifunk.net community. Here I maintain websites and services. I'm a developer of tools that help local communities to grow and connect to other communities.
See also https://blog.andi95.de
Imagine you want to build a simple web service, providing an API for CRUD (Create, Read, Update, Delete) operations. You need to
- connect to databases
- create database-specific queries
- build query statements
- create controllers
- analyse results sets
You see, that's a lot of boilerplate. Using Spring Boot and Spring Data helps you reducing this boilerplate. You don't need to care on database connections and queries anymore and use Spring Data repositories instead of query statements. The auditing feature helps to keep consistency.
With Spring Data REST you can even do more. It uses a Domain-class centric approach to repository interactions. You only need to define what's really important - the domain classes. Domains created with Spring Data REST generate controllers and their dependencies. On top you get HATEOAS links you need to walk through your data.
- comparison of a handwritten REST service and a Spring Data REST service
- use ApplicationListeners, e.g. to do some more specific validations
- how to use HTTP verbs GET, PUT, POST, PATCH and DELETE
idealo.de launched in 2000 and started growing constantly: More features, more people, more and more lines of code. More than 50 developers in 6 teams worked on the same code base.
The software was designed as a Swiss Army knife for our company needs. At the end we've got a big monolith that is hard to maintain. Over the last years we had several approaches to extract some parts to reduce complexity. But very central parts, business functionality and the data model were never touched. The approach is centralized with a single database.
The tech stack used is up-to-date, we have Java 11 with Spring Boot 2 and daily deployments.
In 2018 we made a decision: remove the single, central database and create self-contained systems. Our main goals were:
- create independent and lightweight services
- have continuous deployments
- one service - one team
- teams are responsible for "their" services, from development to operations
- What were our steps? How did we achieve our goals?
- What technologies did we use?
- What kind of cultural changes did we have?