Initialize a Database Using Hibernate – profile and db based

You want to initialize a database with different data depending on the data source? Should be straight forward: https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.data-initialization Spring Boot can automatically create the schema (DDL scripts) of your JDBC DataSource or R2DBC ConnectionFactory and initialize it (DML scripts). It loads SQL from the standard root classpath locations: schema.sql and data.sql, respectively. In addition,…

Distributed lock on GCP Datastore

So, I needed a distributed lock on the GCP Datastore. In theory, it is all very simple: Get the lock Do what you need to do Release the lock And, when I started thinking about it, it became clear that I need to have some kind of transaction mechanism in order to obtain the lock….

Docker image layers

Docker images are layer based – layer based architecture. Each step (instruction) from a Dockerfile creates a layer. These layers are cached and reused next time the image is built. Lets see one Docker file for a node.js app: Now, imagine we change the content of the app folder and then we rebuild the image….

Thread.sleep()

To continue with writing integration tests. When testing asynchronous operations, such as sending message to a queue, waiting for a response and completing some task, we need to introduce some kind of wait time in the test. Instead of using Thread.sleep(), we can use something called Awaitility… Documentation is pretty self explanatory… Testing asynchronous systems…

Spring Integration Testing – WireMock and MQ

When writing integration tests for parts of the application that talk to other applications, for example calling REST APIs or sending JMS messages, sometimes we just want to test the application and not do end to end test. In this case, we would need to mock these other applications or their behavior. Mocking REST For…

IntelliJ auto import on copy-paste

Very nice feature of IntelliJ is auto-importing dependencies and dependencies cleanup (optimize imports), especially useful when copy pasting entire code blocks, deleting stuff etc… Here is a screenshot of where to enable the settings and a link to IntelliJ docs… Auto import Optimize imports

Multiple projects inside one IntelliJ instance

When you are working with multiple projects, for example a number of microservices, it becomes problematic to have an IntelliJ instance open for each of those. There is a trick that allows us to have multiple projects open inside one IntelliJ instance (this saves time, space and RAM :)). Basics steps are as follows: Create…

MapStruct

When working with Spring services and exposing REST API calls, you would usually want to have a set of customized objects exposed to the outside world. These objects, usually called DTOs, can expose some of the domain objects or some projection made out of domain objects (or something else). For mapping between domain data objects…