<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Reflectoring - Where the HOW meets the WHY</title><link>https://reflectoring.io/</link><description>Recent content on Reflectoring - Where the HOW meets the WHY</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Fri, 12 Jul 2024 00:00:00 +1100</lastBuildDate><atom:link href="https://reflectoring.io/index.xml" rel="self" type="application/rss+xml"/><item><title>Guide to JUnit 5 Functional Interfaces</title><link>https://reflectoring.io/junit5-functional-interfaces/</link><pubDate>Fri, 12 Jul 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/junit5-functional-interfaces/</guid><description>In this article, we will get familiar with JUnit 5 functional interfaces. JUnit 5 significantly advanced from its predecessors. Features like functional interfaces can greatly simplify our work once we grasp their functionality.</description></item><item><title>Getting Started with Spring Security and JWT</title><link>https://reflectoring.io/spring-security-jwt/</link><pubDate>Wed, 19 Jun 2024 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-security-jwt/</guid><description>Spring Security provides a comprehensive set of security features for Java applications, covering authentication, authorization, session management, and protection against common security threats such as CSRF (Cross-Site Request Forgery).</description></item><item><title>Creating and Publishing an NPM Package with Automated Versioning and Deployment</title><link>https://reflectoring.io/create-and-publish-npm-package/</link><pubDate>Sun, 16 Jun 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/create-and-publish-npm-package/</guid><description>In this step-by-step guide, we&amp;rsquo;ll create, publish, and manage an NPM package using TypeScript for better code readability and scalability. We&amp;rsquo;ll write test cases with Jest and automate our NPM package versioning and publishing process using Changesets and GitHub Actions.</description></item><item><title>Offloading File Transfers with Amazon S3 Presigned URLs in Spring Boot</title><link>https://reflectoring.io/offloading-file-transfers-with-amazon-s3-presigned-urls-in-spring-boot/</link><pubDate>Sat, 15 Jun 2024 00:00:00 +0530</pubDate><guid>https://reflectoring.io/offloading-file-transfers-with-amazon-s3-presigned-urls-in-spring-boot/</guid><description>When building web applications that involve file uploads or downloads, a common approach is to have the files pass through an application server.</description></item><item><title>One Stop Guide to Java Functional Interfaces</title><link>https://reflectoring.io/one-stop-guide-to-java-functional-interfaces/</link><pubDate>Tue, 11 Jun 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/one-stop-guide-to-java-functional-interfaces/</guid><description>Introduction to Functional Programming Functional programming is a paradigm that focuses on the use of functions to create clear and concise code.</description></item><item><title>Apache HttpClient Configuration</title><link>https://reflectoring.io/apache-http-client-config/</link><pubDate>Wed, 29 May 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/apache-http-client-config/</guid><description>Configuring Apache HttpClient is essential for tailoring its behavior to meet specific requirements and optimize performance. From setting connection timeouts to defining proxy settings, configuration options allow developers to fine-tune the client&amp;rsquo;s behavior according to the needs of their application.</description></item><item><title>Async APIs Offered by Apache HttpClient</title><link>https://reflectoring.io/apache-http-client-async-apis/</link><pubDate>Wed, 29 May 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/apache-http-client-async-apis/</guid><description>In this article, we are going to learn about the async APIs offered by Apache HttpClient. We are going to explore the different ways Apache HttpClient enables developers to send and receive data over the internet in asynchronous mode.</description></item><item><title>Classic APIs Offered by Apache HttpClient</title><link>https://reflectoring.io/apache-http-client-classic-apis/</link><pubDate>Wed, 29 May 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/apache-http-client-classic-apis/</guid><description>In this article, we are going to learn about the classic APIs offered by Apache HttpClient. We are going to explore the different ways Apache HttpClient helps us to send and receive data over the internet in classic (synchronous) mode.</description></item><item><title>Create a HTTP Client with Apache HttpClient</title><link>https://reflectoring.io/create-a-http-client-with-apache-http-client/</link><pubDate>Wed, 29 May 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/create-a-http-client-with-apache-http-client/</guid><description>In this article series, we&amp;rsquo;re going to explore Apache HTTPClient APIs. We&amp;rsquo;ll get familiar with the different ways Apache HttpClient enables developers to send and receive data over the internet.</description></item><item><title>Reactive APIs Offered by Apache HttpClient</title><link>https://reflectoring.io/apache-http-client-reactive-apis/</link><pubDate>Wed, 29 May 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/apache-http-client-reactive-apis/</guid><description>In this article, we are going to learn about reactive APIs offered by Apache HttpClient APIs. We are going to explore how to use reactive, full-duplex HTTP/1.</description></item><item><title>Integrating Amazon S3 with Spring Boot Using Spring Cloud AWS</title><link>https://reflectoring.io/integrating-amazon-s3-with-spring-boot-using-spring-cloud-aws/</link><pubDate>Mon, 27 May 2024 00:00:00 +0530</pubDate><guid>https://reflectoring.io/integrating-amazon-s3-with-spring-boot-using-spring-cloud-aws/</guid><description>In modern web applications, storing and retrieving files has become a common requirement. Whether it is user uploaded content like images and documents or application generated logs and reports, having a reliable and scalable storage solution is crucial.</description></item><item><title>Inheritance, Polymorphism, and Encapsulation in Kotlin</title><link>https://reflectoring.io/kotlin-object-oriented-programming/</link><pubDate>Sun, 12 May 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/kotlin-object-oriented-programming/</guid><description>In the realm of object-oriented programming (OOP), Kotlin stands out as an expressive language that seamlessly integrates modern features with a concise syntax.</description></item><item><title>Publisher-Subscriber Pattern Using AWS SNS and SQS in Spring Boot</title><link>https://reflectoring.io/publisher-subscriber-pattern-using-aws-sns-and-sqs-in-spring-boot/</link><pubDate>Fri, 03 May 2024 00:00:00 +0000</pubDate><guid>https://reflectoring.io/publisher-subscriber-pattern-using-aws-sns-and-sqs-in-spring-boot/</guid><description>In an event-driven architecture where multiple microservices need to communicate with each other, the publisher-subscriber pattern provides an asynchronous communication model to achieve this.</description></item><item><title>Optimizing Node.js Application Performance with Caching</title><link>https://reflectoring.io/node-js-cache/</link><pubDate>Sat, 20 Apr 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/node-js-cache/</guid><description>Endpoints or APIs that perform complex computations and handle large amounts of data face several performance and responsiveness challenges. This occurs because each request initiates a computation or data retrieval process from scratch, which can take time.</description></item><item><title>Bubble Sort in Kotlin</title><link>https://reflectoring.io/bubble-sort-in-kotlin/</link><pubDate>Sun, 14 Apr 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/bubble-sort-in-kotlin/</guid><description>Bubble Sort, a basic yet instructive sorting algorithm, takes us back to the fundamentals of sorting. In this tutorial, we&amp;rsquo;ll look at the Kotlin implementation of Bubble Sort, understanding its simplicity and exploring its limitations.</description></item><item><title>Quick Sort in Kotlin</title><link>https://reflectoring.io/quick-sort-in-kotlin/</link><pubDate>Sun, 14 Apr 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/quick-sort-in-kotlin/</guid><description>Sorting is a fundamental operation in computer science and Quick Sort stands out as one of the most efficient sorting algorithms.</description></item><item><title>Selection Sort in Kotlin</title><link>https://reflectoring.io/selection-sort-in-kotlin/</link><pubDate>Sun, 14 Apr 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/selection-sort-in-kotlin/</guid><description>Sorting is a fundamental operation in computer science, and there are various algorithms to achieve it. One such simple yet effective algorithm is Selection Sort.</description></item><item><title>Understanding Null Safety in Kotlin</title><link>https://reflectoring.io/kotlin-null-safety/</link><pubDate>Sat, 02 Mar 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/kotlin-null-safety/</guid><description>One of the standout features that sets Kotlin apart is its robust approach to null safety. Null safety is a critical aspect of programming languages, aiming to eliminate the notorious null pointer exceptions that often plague developers.</description></item><item><title>Merge Sort in Kotlin</title><link>https://reflectoring.io/kotlin-merge-sort/</link><pubDate>Tue, 20 Feb 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/kotlin-merge-sort/</guid><description>Sorting is a fundamental operation that plays a crucial role in various applications. Among the many sorting algorithms, merge sort stands out for its efficiency and simplicity.</description></item><item><title>Extension Functions in Kotlin</title><link>https://reflectoring.io/extension%20functions%20in%20kotlin/</link><pubDate>Tue, 13 Feb 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/extension%20functions%20in%20kotlin/</guid><description>One of Kotlin&amp;rsquo;s standout features is extension functions, a mechanism that empowers developers to enhance existing classes without modifying their source code.</description></item><item><title>Use Cases for Java Records</title><link>https://reflectoring.io/beginner-friendly-guide-to-java-records/</link><pubDate>Sun, 11 Feb 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/beginner-friendly-guide-to-java-records/</guid><description>Java Records introduce a simple syntax for creating data-centric classes, making our code more concise, expressive, and maintainable.
In this guide, we&amp;rsquo;ll explore the key concepts and practical applications of Java Records, providing a step-by-step guide to creating records and sharing best practices for using them effectively in projects.</description></item><item><title>Deserialize with Jackson's @JsonCreator in a Spring Boot Application</title><link>https://reflectoring.io/spring-jsoncreator/</link><pubDate>Fri, 09 Feb 2024 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-jsoncreator/</guid><description>The FasterXML Jackson library is the most popular JSON parser in Java. Spring internally uses this API for JSON parsing. For details on other commonly used Jackson annotations, refer to this article.</description></item><item><title>Publish and Receive Messages with Google Pub/Sub in Node.js</title><link>https://reflectoring.io/google-pub-sub-in-node-js/</link><pubDate>Fri, 12 Jan 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/google-pub-sub-in-node-js/</guid><description>Google Cloud Pub/Sub employs a publish-subscribe model, streamlining modern software communication and reshaping how information is shared. Publishers send messages to topics, and subscribers interested in those messages can retrieve them flexibly and asynchronously.</description></item><item><title>High-Order Functions vs. Inline Functions in Kotlin</title><link>https://reflectoring.io/kotlin-high-order-vs-inline-functions/</link><pubDate>Wed, 10 Jan 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/kotlin-high-order-vs-inline-functions/</guid><description>One of Kotlin&amp;rsquo;s standout features is its robust support for functions, including high-order functions and inline functions. In this blog post, we will delve into the world of functions in Kotlin, exploring the differences between high-order functions and inline functions and understanding when to leverage each for optimal code efficiency.</description></item><item><title>Design Patterns in Kotlin</title><link>https://reflectoring.io/kotlin-design-patterns/</link><pubDate>Tue, 02 Jan 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/kotlin-design-patterns/</guid><description>A design pattern is a general repeatable solution to a commonly occurring problem in software design. In this blog post, we will delve into various design patterns and explore how they can be effectively implemented in Kotlin.</description></item><item><title>Sealed Classes vs Enums in Kotlin</title><link>https://reflectoring.io/kotlin-enum-vs-sealed-classes/</link><pubDate>Tue, 02 Jan 2024 00:00:00 +1100</pubDate><guid>https://reflectoring.io/kotlin-enum-vs-sealed-classes/</guid><description>Kotlin, a modern JVM programming language, brings a range of features to enhance expressiveness and conciseness. Two key constructs in Kotlin that contribute to its versatility are sealed classes and enum classes.</description></item><item><title>Don't Use Checked Exceptions</title><link>https://reflectoring.io/do-not-use-checked-exceptions/</link><pubDate>Tue, 26 Dec 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/do-not-use-checked-exceptions/</guid><description>Introduction Java is the only (mainstream) programming language to implement the concept of checked exceptions. Ever since, checked exceptions have been the subject of controversy.</description></item><item><title>Guide to Sorting in Kotlin</title><link>https://reflectoring.io/sorting%20in%20kotlin/</link><pubDate>Tue, 26 Dec 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/sorting%20in%20kotlin/</guid><description>Sorting refers to the process of arranging elements in a specific order. The order could be ascending or descending based on certain criteria such as numerical or lexicographical order.</description></item><item><title>Understanding Socket.IO: Building a simple real-time chat app with Node.js and Socket.IO</title><link>https://reflectoring.io/tutorial-nodejs-socketio/</link><pubDate>Wed, 06 Dec 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/tutorial-nodejs-socketio/</guid><description>Traditional web applications primarily used the HTTP request-response model, where clients sent requests to servers, and servers responded with data. However, implementing real-time features like live chat, notifications, collaborative tools, etc, was challenging.</description></item><item><title>Spring Basics</title><link>https://reflectoring.io/spring-basics/</link><pubDate>Mon, 04 Dec 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/spring-basics/</guid><description>At its core, Spring is a Dependency Injection framework. Although it now offers a variety of other features that simplify developers' lives, most of these are built on top of the Dependency Injection framework.</description></item><item><title>Spring Boot Basics</title><link>https://reflectoring.io/spring-boot-basics/</link><pubDate>Mon, 04 Dec 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/spring-boot-basics/</guid><description>Spring Boot builds on top of the Spring Framework and provides a wealth of additional features and integrations. To simplify somewhat, one could say that the Spring Framework focuses on functions related to the application context, while Spring Boot provides functions that are needed in many applications running in production or that simplify developer life.</description></item><item><title>All You Need to Know about Spring's Java Config</title><link>https://reflectoring.io/beginner-friendly-guide-to-spring-java-config/</link><pubDate>Sat, 18 Nov 2023 00:00:00 +0530</pubDate><guid>https://reflectoring.io/beginner-friendly-guide-to-spring-java-config/</guid><description>Welcome to the exciting world of Spring&amp;rsquo;s Java Configuration!
In this comprehensive guide, we will learn Spring&amp;rsquo;s Java-based configuration. We will get familiar with core annotations like @Bean and @Configuration.</description></item><item><title>Introduction to Ktor</title><link>https://reflectoring.io/introduction-to-ktor/</link><pubDate>Sat, 18 Nov 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/introduction-to-ktor/</guid><description>Web application development is a critical domain for businesses and developers. Building web applications that are efficient, scalable, and easy to maintain is a challenging task.</description></item><item><title>Testing with Mockk</title><link>https://reflectoring.io/introduction-to-Mockk/</link><pubDate>Sat, 18 Nov 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/introduction-to-Mockk/</guid><description>Mocking in software development is a technique used to simulate the behavior of external dependencies or components within a system during testing.</description></item><item><title>Create an HTTP Client with OpenFeign</title><link>https://reflectoring.io/create-openfeign-http-client/</link><pubDate>Sat, 14 Oct 2023 00:00:00 +0530</pubDate><guid>https://reflectoring.io/create-openfeign-http-client/</guid><description>Feign is an open-source Java library that simplifies the process of making web requests. It streamlines the implementation of RESTful web services by providing a higher-level abstraction.</description></item><item><title>Introduction to Kotest</title><link>https://reflectoring.io/introduction-to-Kotest/</link><pubDate>Sat, 14 Oct 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/introduction-to-Kotest/</guid><description>Kotest is simply a multi-platform framework used for testing written in Kotlin. In this tutorial, we shall cover the following sub-topics related to the Kotest framework: testing with Kotest, testing styles used, grouping Kotest tests with tags, the lifecycle hooks and assertions supported by Kotest.</description></item><item><title>Introduction to KDoc</title><link>https://reflectoring.io/introduction-to-kDoc/</link><pubDate>Sat, 23 Sep 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/introduction-to-kDoc/</guid><description>In this article, we&amp;rsquo;ll discuss all that entails KDoc in Kotlin. KDoc is simply a language used to document code written in Kotlin specifically.</description></item><item><title>How to Implement API Rate Limiting in a Node.js Express Application</title><link>https://reflectoring.io/tutorial-nodejs-rate-limiter/</link><pubDate>Tue, 19 Sep 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/tutorial-nodejs-rate-limiter/</guid><description>Have you ever wondered how public API platforms, payment services, or popular websites such as Medium, Twitter, and others manage that their APIs are not overloaded?</description></item><item><title>Code Formatting with Ktlint</title><link>https://reflectoring.io/code-format-with-ktlint/</link><pubDate>Mon, 04 Sep 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/code-format-with-ktlint/</guid><description>In this tutorial, we are going to learn about Ktlint, a linting tool for Kotlin. Ktlint checks the style of our code and also helps us to format it against some guidelines.</description></item><item><title>CI/CD with Node.js and a GitHub Actions Runner Hosted on AWS EC2</title><link>https://reflectoring.io/tutorial-cicd-github-actions-pm2-nodejs-aws-ec2/</link><pubDate>Tue, 15 Aug 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/tutorial-cicd-github-actions-pm2-nodejs-aws-ec2/</guid><description>You and your team have spent countless hours meticulously crafting a groundbreaking application that could propel your Startup to new heights.</description></item><item><title>Operators in TypeScript</title><link>https://reflectoring.io/typescript-operators/</link><pubDate>Tue, 01 Aug 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/typescript-operators/</guid><description>TypeScript is a superset of JavaScript that adds static typing and other features to the language. Its operators are crucial to understanding the language and writing effective code.</description></item><item><title>The Art of Writing Clean Code: A Key to Maintainable Software</title><link>https://reflectoring.io/clean-code/</link><pubDate>Sun, 02 Jul 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/clean-code/</guid><description>&amp;ldquo;Spaghetti code&amp;rdquo; has long been an issue in the field of software development. Many developers have discovered the difficulty with deciphering complex tangles of code, which leads to increased delays and frustration for everyone involved.</description></item><item><title>Enforcing Your Architecture with ArchUnit</title><link>https://reflectoring.io/enforce-architecture-with-arch-unit/</link><pubDate>Sun, 25 Jun 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/enforce-architecture-with-arch-unit/</guid><description>ArchUnit is a Java library to validate your software architecture. The library is well described in its documentation and as its fluent API is pure Java, it&amp;rsquo;s easy to explore using the code completion in the IDE.</description></item><item><title>Organizing Code in Node.js Application</title><link>https://reflectoring.io/organize-code-with-nodejs-tutorial/</link><pubDate>Wed, 17 May 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/organize-code-with-nodejs-tutorial/</guid><description>Node.js is a popular server-side runtime engine based on JavaScript to build and run web applications. Organizing our source code right from the start is a crucial initial step for building large applications.</description></item><item><title>How to Build Responsive Web Apps with Spring Boot and React: A Step-by-Step Guide</title><link>https://reflectoring.io/build-responsive-web-apps-with-springboot-and-react-tutorial/</link><pubDate>Mon, 08 May 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/build-responsive-web-apps-with-springboot-and-react-tutorial/</guid><description>Choosing a backend and frontend stack for web apps can be a daunting task, as there are numerous options available for backend (Node.</description></item><item><title>Structured Logging with Spring Boot and Amazon CloudWatch</title><link>https://reflectoring.io/struct-log-with-cloudwatch-tutorial/</link><pubDate>Mon, 08 May 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/struct-log-with-cloudwatch-tutorial/</guid><description>The primary purpose of logging in applications is to debug and trace one or more root causes of an unexpected behavior.</description></item><item><title>Serialize and Deserialize with Jackson's @JsonView in a Spring Boot Application</title><link>https://reflectoring.io/jackson-jsonview-tutorial/</link><pubDate>Wed, 26 Apr 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/jackson-jsonview-tutorial/</guid><description>The Jackson API is one of the best JSON parsers in Java. Spring integrates well with Jackson and with every new Spring release, newer Jackson features get incorporated making the Spring Jackson support more flexible and powerful.</description></item><item><title>Build CRUD APIs Using Apollo Server(Graphql), MongoDB and Node.Js</title><link>https://reflectoring.io/tutorial-graphql-apollo-server-nodejs-mongodb/</link><pubDate>Wed, 22 Mar 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/tutorial-graphql-apollo-server-nodejs-mongodb/</guid><description>REST API is a widely used client-server communication protocol, but it has limitations when dealing with clients such as web, iOS, Android, smart devices, etc.</description></item><item><title>Getting started with Spring Security and Spring Boot</title><link>https://reflectoring.io/spring-security/</link><pubDate>Tue, 28 Feb 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/spring-security/</guid><description>Spring Security is a framework that helps secure enterprise applications. By integrating with Spring MVC, Spring Webflux or Spring Boot, we can create a powerful and highly customizable authentication and access-control framework.</description></item><item><title>Demystifying Transactions and Exceptions with Spring</title><link>https://reflectoring.io/spring-transactions-and-exceptions/</link><pubDate>Tue, 31 Jan 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/spring-transactions-and-exceptions/</guid><description>One of the most convincing justifications for using the Spring Framework is its extensive transaction support. For transaction management, the Spring Framework offers a stable abstraction.</description></item><item><title>JUnit 5 Parameterized Tests</title><link>https://reflectoring.io/tutorial-JUnit5-parameterized-tests/</link><pubDate>Sun, 29 Jan 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/tutorial-JUnit5-parameterized-tests/</guid><description>If you’re reading this article, it means you’re already well-versed with JUnit.
Let me give you a summary of JUnit - In software development, we developers write code which does something simple as designing a person’s profile or as complex as making a payment (in a banking system).</description></item><item><title>Understanding Merge Sort in Kotlin</title><link>https://reflectoring.io/introduction-to-Mockk/</link><pubDate>Wed, 18 Jan 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/introduction-to-Mockk/</guid><description>Introduction Sorting is a fundamental operation that plays a crucial role in various applications. Among the many sorting algorithms, merge sort stands out for its efficiency and simplicity.</description></item><item><title>Building a CSV Importer with Node.js</title><link>https://reflectoring.io/node-csv-importer/</link><pubDate>Fri, 06 Jan 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/node-csv-importer/</guid><description>Consider the case where someone provides us with a CSV file containing employee details that have been exported from an employee management application.</description></item><item><title>Admin Operations with Node.js and Feature Flags</title><link>https://reflectoring.io/nodejs-admin-feature-flag-launchdarkly/</link><pubDate>Tue, 03 Jan 2023 00:00:00 +1100</pubDate><guid>https://reflectoring.io/nodejs-admin-feature-flag-launchdarkly/</guid><description>Whenever we deploy a new version of an application, we may break things or the users may not like the changes.</description></item><item><title>Dependency Injection and Inversion of Control</title><link>https://reflectoring.io/dependency-injection-and-inversion-of-control/</link><pubDate>Thu, 08 Dec 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/dependency-injection-and-inversion-of-control/</guid><description>Inversion of control (IoC) is simply providing a callback (reaction) to an event that might happen in a system. In other words, instead of executing some logic directly, we invert the control to that callback whenever a specific event occurs.</description></item><item><title>6 Proven Cloud Cost Management Practices for Kubernetes</title><link>https://reflectoring.io/blog/2022/2022-11-24-6-cloud-cost-management-practices/</link><pubDate>Thu, 24 Nov 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/blog/2022/2022-11-24-6-cloud-cost-management-practices/</guid><description>Teams looking to control and reduce their cloud costs can choose from multiple cloud cost management approaches. All of them require at least a basic understanding of what&amp;rsquo;s going on in your cloud infrastructure - this part relies on monitoring and reporting.</description></item><item><title>Building a Url Shortener With Node.Js</title><link>https://reflectoring.io/node-url-shortener/</link><pubDate>Fri, 04 Nov 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/node-url-shortener/</guid><description>How to design a URL shortening service like tinyurl.com is a frequently asked question in system design interviews. URL shortener services convert long URLs into significantly shorter URL links.</description></item><item><title>Automated Tests with Feature Flags and Cypress</title><link>https://reflectoring.io/nodejs-feature-flag-launchdarkly-react-cypress/</link><pubDate>Thu, 03 Nov 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/nodejs-feature-flag-launchdarkly-react-cypress/</guid><description>Development teams, nowadays, can deliver quick value to consumers with far less risk with the help of feature flag-driven development.</description></item><item><title>Configuring CSRF/XSRF with Spring Security</title><link>https://reflectoring.io/spring-csrf/</link><pubDate>Fri, 21 Oct 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/spring-csrf/</guid><description>Cross-site Request Forgery (CSRF, sometimes also called XSRF) is an attack that can trick an end-user using a web application to unknowingly execute actions that can compromise security.</description></item><item><title>Feature Flags Best Practices</title><link>https://reflectoring.io/blog/2022/2022-10-21-feature-flags-best-practices/</link><pubDate>Fri, 21 Oct 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/blog/2022/2022-10-21-feature-flags-best-practices/</guid><description>Feature flags, in their simplest form, are just if conditions in your code that check if a certain feature is enabled or not.</description></item><item><title>AOP with Spring (Boot)</title><link>https://reflectoring.io/aop-spring/</link><pubDate>Mon, 17 Oct 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/aop-spring/</guid><description>What is AOP? Aspect Oriented Programming (AOP) is a programming paradigm aiming to extract cross-cutting functionalities, such as logging, into what&amp;rsquo;s known as &amp;ldquo;Aspects&amp;rdquo;.</description></item><item><title>9 Practices to Support Continuous Deployment</title><link>https://reflectoring.io/blog/2022/2022-10-10-continuous-deployment-practices/</link><pubDate>Mon, 10 Oct 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/blog/2022/2022-10-10-continuous-deployment-practices/</guid><description>Continuous Deployment is the state-of-the-art way to ship software these days. Often, however, it&amp;rsquo;s not possible to practice continuous deployment because the context doesn&amp;rsquo;t allow it (yet).</description></item><item><title>Handling Timezones in a Spring Boot Application</title><link>https://reflectoring.io/spring-timezones/</link><pubDate>Mon, 26 Sep 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/spring-timezones/</guid><description>It is common to encounter applications that run in different time zones. Handling date and time operations consistently across multiple layers of an application can be tricky.</description></item><item><title>JUnit 5 by Examples</title><link>https://reflectoring.io/junit5/</link><pubDate>Sun, 11 Sep 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/junit5/</guid><description>In software development, unit testing means writing tests to verify that our code is working as logical units.
Different people tend to think of a &amp;ldquo;logical unit&amp;rdquo; in different ways.</description></item><item><title>Scheduling Jobs with Node.js</title><link>https://reflectoring.io/schedule-cron-job-in-node/</link><pubDate>Mon, 05 Sep 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/schedule-cron-job-in-node/</guid><description>Have you ever wanted to perform a specific task on your application server at specific times without physically running them yourself?</description></item><item><title>Rollout Strategies with Feature Flags</title><link>https://reflectoring.io/rollout-strategies-with-feature-flags/</link><pubDate>Mon, 29 Aug 2022 00:00:00 +0000</pubDate><guid>https://reflectoring.io/rollout-strategies-with-feature-flags/</guid><description>Rolling out new features is one of the most satisfying parts of our job. Finally, users will see the new feature we&amp;rsquo;ve worked on so hard!</description></item><item><title>Configuring CORS with Spring Boot and Spring Security</title><link>https://reflectoring.io/spring-cors/</link><pubDate>Fri, 26 Aug 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/spring-cors/</guid><description>Cross-Origin Resource Sharing (CORS) is an HTTP-header-based mechanism that allows servers to explicitly allowlist certain origins and helps bypass the same-origin policy.</description></item><item><title>Testing Feature Flags</title><link>https://reflectoring.io/testing-feature-flags/</link><pubDate>Sat, 20 Aug 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/testing-feature-flags/</guid><description>Putting your code behind a feature flag means that you can deploy unfinished changes. As long as the feature flag is disabled, the changes are not having an effect.</description></item><item><title>Testing Time-Based Features with Feature Flags</title><link>https://reflectoring.io/date-time-feature-flags/</link><pubDate>Wed, 03 Aug 2022 00:00:00 +1000</pubDate><guid>https://reflectoring.io/date-time-feature-flags/</guid><description>Time-based features in a software application are a pain to test. To test such a feature, you can (and should) write unit tests, of course.</description></item><item><title>Getting Started with AWS Step Functions</title><link>https://reflectoring.io/getting-started-with-aws-step-functions-tutorial/</link><pubDate>Tue, 26 Jul 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/getting-started-with-aws-step-functions-tutorial/</guid><description>AWS Step Functions is a serverless orchestration service by which we can combine AWS Lambda functions and other AWS services to build complex business applications.</description></item><item><title>Node.js Logging with Winston</title><link>https://reflectoring.io/node-logging-winston/</link><pubDate>Mon, 25 Jul 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/node-logging-winston/</guid><description>Logging is used to provide accurate context about what occurs in our application, it is the documentation of all events that happen within an application.</description></item><item><title>All You Need To Know About JSON Parsing With Jackson</title><link>https://reflectoring.io/jackson/</link><pubDate>Fri, 15 Jul 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/jackson/</guid><description>Most of the web today exchanges data in JSON format. Web servers, web and mobile applications, even IoT devices all talk with each other using JSON.</description></item><item><title>Understanding Kotlin Coroutines</title><link>https://reflectoring.io/understanding-kotlin-coroutines-tutorial/</link><pubDate>Thu, 14 Jul 2022 05:00:00 +0000</pubDate><guid>https://reflectoring.io/understanding-kotlin-coroutines-tutorial/</guid><description>Coroutines are a design pattern for writing asynchronous programs for running multiple tasks concurrently.
In asynchronous programs, multiple tasks execute in parallel on separate threads without waiting for the other tasks to complete.</description></item><item><title>Run Your Gradle Build Anywhere with the Gradle Wrapper</title><link>https://reflectoring.io/gradle-wrapper/</link><pubDate>Mon, 04 Jul 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/gradle-wrapper/</guid><description>Gradle is a build automation tool that supports multi-language development. It is helpful to build, test, publish, and deploy software on any platform.</description></item><item><title>Distribute Static Content with Amazon CloudFront</title><link>https://reflectoring.io/distribute-static-content-with-cloudfront-tutorial/</link><pubDate>Wed, 08 Jun 2022 05:00:00 +0000</pubDate><guid>https://reflectoring.io/distribute-static-content-with-cloudfront-tutorial/</guid><description>Amazon CloudFront is a fast content delivery network (CDN) service that securely delivers data, videos, applications, and APIs to customers globally with low latency.</description></item><item><title>One-Stop Guide to Mapping with MapStruct</title><link>https://reflectoring.io/java-mapping-with-mapstruct/</link><pubDate>Wed, 08 Jun 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/java-mapping-with-mapstruct/</guid><description>When we define multi-layered architectures, we often tend to represent data differently at each layer. The interactions between each layer become quite tedious and cumbersome.</description></item><item><title>Using a Jump host to access an RDS database in a private subnet</title><link>https://reflectoring.io/connect-rds-byjumphost/</link><pubDate>Wed, 01 Jun 2022 05:00:00 +0000</pubDate><guid>https://reflectoring.io/connect-rds-byjumphost/</guid><description>Back-end server resources like databases often contain data that is critical for an application to function consistently. So these resources are protected from public access over the internet by placing them in a private subnet.</description></item><item><title>Complete Guide to Axios HTTP Client</title><link>https://reflectoring.io/tutorial-guide-axios/</link><pubDate>Fri, 20 May 2022 05:00:00 +0000</pubDate><guid>https://reflectoring.io/tutorial-guide-axios/</guid><description>Making API calls is integral to most applications and while doing this we use an HTTP client usually available as an external library.</description></item><item><title>Typesafe HTTP Clients with OkHttp and Retrofit</title><link>https://reflectoring.io/okhttp-retrofit/</link><pubDate>Tue, 17 May 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/okhttp-retrofit/</guid><description>Developers use HTTP Clients to communicate with other applications over the network. Over the years, multiple HTTP Clients have been developed to suit various application needs.</description></item><item><title>Reactive Architecture with Spring Boot</title><link>https://reflectoring.io/reactive-architecture-with-spring-boot/</link><pubDate>Sun, 08 May 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/reactive-architecture-with-spring-boot/</guid><description>Microservices are meant to be adaptable, scalable, and highly performant so that they can be more competitive to the other products in the market.</description></item><item><title>Comprehensive Guide to Java Streams</title><link>https://reflectoring.io/comprehensive-guide-to-java-streams/</link><pubDate>Thu, 05 May 2022 05:00:00 +0000</pubDate><guid>https://reflectoring.io/comprehensive-guide-to-java-streams/</guid><description>A stream is a sequence of elements on which we can perform different kinds of sequential and parallel operations. The Stream API was introduced in Java 8 and is used to process collections of objects.</description></item><item><title>Getting Started with Amazon EC2</title><link>https://reflectoring.io/getting-started-with-amazon-ec2/</link><pubDate>Sun, 24 Apr 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/getting-started-with-amazon-ec2/</guid><description>Amazon Elastic Compute Cloud (EC2) is a compute service with which we can create virtual machines in the AWS Cloud. We can configure the computing capacity of an EC2 instance and attach different types and capacities of storage which we can further scale up or down to handle changes in server load and consumer traffic, thereby reducing our need to forecast the capacity for investing in hardware upfront.</description></item><item><title>Error Handling in Express</title><link>https://reflectoring.io/express-error-handling/</link><pubDate>Wed, 20 Apr 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/express-error-handling/</guid><description>Error handling functions in an application detect and capture multiple error conditions and take appropriate remedial actions to either recover from those errors or fail gracefully.</description></item><item><title>When Should I Use Project Lombok?</title><link>https://reflectoring.io/when-to-use-lombok/</link><pubDate>Sun, 10 Apr 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/when-to-use-lombok/</guid><description>Project Lombok is a popular library that helps us to write clear, concise, and less repetitive Java code. However, among the developer community, it has been both embraced and criticized for reasons I would like to elaborate here.</description></item><item><title>Exposing a Helpful Info Endpoint with Spring Boot Actuator</title><link>https://reflectoring.io/spring-boot-info-endpoint/</link><pubDate>Mon, 28 Mar 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/spring-boot-info-endpoint/</guid><description>In a distributed, fast-paced environment, dev teams often want to find out at what time they deployed the app, what version of the app they deployed, what Git commit was deployed, and more.</description></item><item><title>Complete Guide to Express Middleware</title><link>https://reflectoring.io/express-middleware/</link><pubDate>Sat, 26 Mar 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/express-middleware/</guid><description>Middleware functions are an integral part of an application built with the Express framework (henceforth referred to as Express application). They access the HTTP request and response objects and can either terminate the HTTP request or forward it for further processing to another middleware function.</description></item><item><title>Getting Started with Spring Boot</title><link>https://reflectoring.io/getting-started-with-spring-boot/</link><pubDate>Mon, 21 Mar 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/getting-started-with-spring-boot/</guid><description>In this article, we will build a production-grade application with Spring Boot.
After understanding the use case and requirements, we will implement the application layer by layer.</description></item><item><title>Processing Streams with Amazon Kinesis</title><link>https://reflectoring.io/processing-streams-with-aws-kinesis/</link><pubDate>Thu, 17 Mar 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/processing-streams-with-aws-kinesis/</guid><description>Amazon Kinesis is a family of managed services for collecting and processing streaming data in real-time. Stream processing platforms are an integral part of the Big Data ecosystem.</description></item><item><title>Feature Flags: Make or Buy?</title><link>https://reflectoring.io/feature-flags-make-or-buy/</link><pubDate>Tue, 15 Mar 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/feature-flags-make-or-buy/</guid><description>According to Google&amp;rsquo;s DevOps Research and Assessment (DORA) group, software delivery performance influences organizational performance in general. That means if you&amp;rsquo;re good at delivering software, you&amp;rsquo;re good at business.</description></item><item><title>Getting Started with Spring WebFlux</title><link>https://reflectoring.io/getting-started-with-spring-webflux/</link><pubDate>Thu, 10 Mar 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/getting-started-with-spring-webflux/</guid><description>Most traditional applications deal with blocking calls or, in other words, synchronous calls. This means that if we want to access a particular resource in a system with most of the threads being busy, then the application would block the new one or wait until the previous threads complete processing its requests.</description></item><item><title>Create Command-line Applications with Spring Shell</title><link>https://reflectoring.io/spring-shell/</link><pubDate>Wed, 09 Mar 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/spring-shell/</guid><description>Spring Shell allows us to build a command line (shell) application using the Spring framework and all the advantages it provides.</description></item><item><title>Improving Performance with Java's CompletableFuture</title><link>https://reflectoring.io/java-completablefuture/</link><pubDate>Mon, 21 Feb 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/java-completablefuture/</guid><description>In this article, we will learn how to use CompletableFuture to increase the performance of our application. We&amp;rsquo;ll start with looking at the Future interface and its limitations and then will discuss how we can instead use the CompletableFuture class to overcome these limitations.</description></item><item><title>CommonJS vs. ES Modules: Modules and Imports in NodeJS</title><link>https://reflectoring.io/nodejs-modules-imports/</link><pubDate>Fri, 18 Feb 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/nodejs-modules-imports/</guid><description>A module system allows us to split up our code in different parts or to include code written by other developers.</description></item><item><title>Getting Started with Express</title><link>https://reflectoring.io/getting-started-with-express/</link><pubDate>Tue, 15 Feb 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/getting-started-with-express/</guid><description>Express is a web application framework for Node.js. We can use this framework to build APIs, serve web pages, and other static assets and use it as a lightweight HTTP server and backend for our applications.</description></item><item><title>Getting Started with Amazon SQS</title><link>https://reflectoring.io/getting-started-with-aws-sqs/</link><pubDate>Thu, 10 Feb 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/getting-started-with-aws-sqs/</guid><description>Amazon Simple Queue Service (SQS) is a fully managed message queuing service that enables decoupling and communication between the components of a distributed system.</description></item><item><title>An Introduction to Annotations and Annotation Processing in Java</title><link>https://reflectoring.io/java-annotation-processing/</link><pubDate>Sat, 05 Feb 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/java-annotation-processing/</guid><description>An annotation is a construct associated with Java source code elements such as classes, methods, and variables. Annotations provide information to a program at compile time or at runtime based on which the program can take further action.</description></item><item><title>Protect Your Code from NullPointerExceptions with Spring's Null-Safety Annotations</title><link>https://reflectoring.io/spring-boot-null-safety-annotations/</link><pubDate>Tue, 01 Feb 2022 00:00:00 +1000</pubDate><guid>https://reflectoring.io/spring-boot-null-safety-annotations/</guid><description>NullPointerExceptions (often shortened as &amp;ldquo;NPE&amp;rdquo;) are a nightmare for every Java programmer.
We can find plenty of articles on the internet explaining how to write null-safe code.</description></item><item><title>Getting Started with AWS CDK</title><link>https://reflectoring.io/getting-started-with-aws-cdk/</link><pubDate>Sun, 23 Jan 2022 06:00:00 +1000</pubDate><guid>https://reflectoring.io/getting-started-with-aws-cdk/</guid><description>Infrastructure as Code (IaC) is the managing and provisioning of infrastructure through code instead of through a manual process.
AWS provides native support for IaC through the CloudFormation service.</description></item><item><title>Complete Guide to the Immutables Java Library</title><link>https://reflectoring.io/immutables-library/</link><pubDate>Mon, 17 Jan 2022 00:00:00 +1100</pubDate><guid>https://reflectoring.io/immutables-library/</guid><description>Immutability means that an object&amp;rsquo;s state is constant after the initialization. It cannot change afterward.
When we pass an object into a method, we pass the reference to that object.</description></item><item><title>Common Operations on Java Collections</title><link>https://reflectoring.io/common-operations-on-java-collections/</link><pubDate>Sat, 15 Jan 2022 06:00:00 +1000</pubDate><guid>https://reflectoring.io/common-operations-on-java-collections/</guid><description>Collections are containers to group multiple items in a single unit. For example, a collection can represent a stack of books, products of a category, a queue of text messages, etc.</description></item><item><title>Tracing with Spring Boot, OpenTelemetry, and Jaeger</title><link>https://reflectoring.io/spring-boot-tracing/</link><pubDate>Sun, 09 Jan 2022 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-tracing/</guid><description>In a distributed system, many services can be involved in creating a response to a single request. Not only for debugging purposes it’s essential that the path of such a request can be traced through all involved services.</description></item><item><title>Reflectoring Review 2021 - Growing Slowly</title><link>https://reflectoring.io/review-2021/</link><pubDate>Sun, 02 Jan 2022 00:00:00 +0000</pubDate><guid>https://reflectoring.io/review-2021/</guid><description>It&amp;rsquo;s the time of the year again when I reflect about the Reflectoring year (pun intended). In this article, I share a bit about my successes and failures as a creator of code, text, and (coming up) a SaaS product.</description></item><item><title>Complete Guide to Spring RestTemplate</title><link>https://reflectoring.io/spring-resttemplate/</link><pubDate>Wed, 29 Dec 2021 05:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-resttemplate/</guid><description>REST-styled APIs are all around us. Many applications need to invoke REST APIs for some or all of their functions. Hence for applications to function gracefully, they need to consume APIs elegantly and consistently.</description></item><item><title>Be Scrappy, Not Crappy</title><link>https://reflectoring.io/be-scrappy-not-crappy/</link><pubDate>Sun, 12 Dec 2021 09:00:00 +0000</pubDate><guid>https://reflectoring.io/be-scrappy-not-crappy/</guid><description>It&amp;rsquo;s not so long ago that I learned the term &amp;ldquo;scrappy&amp;rdquo;. Someone was looking to build a &amp;ldquo;scrappy&amp;rdquo; team of software engineers to build the next big thing, and build it fast.</description></item><item><title>How to Internationalize a Spring Boot Application</title><link>https://reflectoring.io/spring-boot-internationalization/</link><pubDate>Sat, 04 Dec 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-internationalization/</guid><description>Internationalization is the process of making an application adaptable to multiple languages and regions without major changes in the source code.</description></item><item><title>Java Features from Java 8 to Java 17</title><link>https://reflectoring.io/java-release-notes/</link><pubDate>Mon, 29 Nov 2021 05:00:00 +0000</pubDate><guid>https://reflectoring.io/java-release-notes/</guid><description>A lot has changed in Java from its beginnings in 1995 until today. Java 8 was a revolutionary release that put Java back on the pedestal of the best programming languages.</description></item><item><title>Creating Hashes in Java</title><link>https://reflectoring.io/creating-hashes-in-java/</link><pubDate>Sun, 21 Nov 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/creating-hashes-in-java/</guid><description>A hash is a piece of text computed with a cryptographic hashing function. It is used for various purposes mainly in the security realm like securely storing sensitive information and safeguarding data integrity.</description></item><item><title>Comparison of Java HTTP Clients</title><link>https://reflectoring.io/comparison-of-java-http-clients/</link><pubDate>Tue, 09 Nov 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/comparison-of-java-http-clients/</guid><description>Hypertext Transfer Protocol (HTTP) is an application-layer protocol for transmitting hypermedia documents, such as HTML, and API payloads in a standard format like JSON and XML.</description></item><item><title>One Best Way - Continuous Improvement in Software Engineering</title><link>https://reflectoring.io/one-best-way/</link><pubDate>Sun, 07 Nov 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/one-best-way/</guid><description>Let&amp;rsquo;s talk about what it means to find the one best way of doing something. We&amp;rsquo;ve been trying to answer this question since the dawn of someone teaching anyone how to do a task.</description></item><item><title>Feature Flags with Spring Boot</title><link>https://reflectoring.io/spring-boot-feature-flags/</link><pubDate>Sat, 06 Nov 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-feature-flags/</guid><description>Feature flags are a great tool to improve confidence in deployments and to avoid impacting customers with unintended changes.
Instead of deploying a new feature directly to production, we &amp;ldquo;hide&amp;rdquo; it behind an if/else statement in our code that evaluates a feature flag.</description></item><item><title>Laws and Principles of Software Development</title><link>https://reflectoring.io/laws-and-principles-of-software-development/</link><pubDate>Sun, 31 Oct 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/laws-and-principles-of-software-development/</guid><description>In discussions around software development, it&amp;rsquo;s almost impossible to avoid quoting a law or two.
&amp;ldquo;This won&amp;rsquo;t work because of &amp;lsquo;The Law of X&amp;rsquo;!</description></item><item><title>Timeouts with Spring Boot and Resilience4j</title><link>https://reflectoring.io/time-limiting-with-springboot-resilience4j/</link><pubDate>Sun, 24 Oct 2021 05:00:00 +0000</pubDate><guid>https://reflectoring.io/time-limiting-with-springboot-resilience4j/</guid><description>In this series so far, we have learned how to use the Resilience4j Retry, RateLimiter, TimeLimiter, Bulkhead, Circuitbreaker core modules and also seen its Spring Boot support for the Retry and the RateLimiter modules.</description></item><item><title>Asserting Lists with AssertJ</title><link>https://reflectoring.io/assertj-lists/</link><pubDate>Mon, 04 Oct 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/assertj-lists/</guid><description>In tests, we need to add assertions to make sure that a result is the expected result. For this, we can make use of the AssertJ assertion library.</description></item><item><title>Atomic Habits in Software Development</title><link>https://reflectoring.io/atomic-habits-in-software-development/</link><pubDate>Sat, 25 Sep 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/atomic-habits-in-software-development/</guid><description>Compound interest is both a powerful and apt analogy for when it comes to devising your workflows. Improving a process' efficiency and efficacy by 2% can feel negligible.</description></item><item><title>Zero Downtime Database Changes with Feature Flags - Step by Step</title><link>https://reflectoring.io/zero-downtime-deployments-with-feature-flags/</link><pubDate>Wed, 22 Sep 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/zero-downtime-deployments-with-feature-flags/</guid><description>Whenever we make a change in our database schema, we also have to make a change in the code that uses that database schema.</description></item><item><title>Running Scheduled Jobs in Spring Boot</title><link>https://reflectoring.io/spring-scheduler/</link><pubDate>Sun, 19 Sep 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-scheduler/</guid><description>Scheduling is the process of executing a piece of logic at a specific time in the future. Scheduled jobs are a piece of business logic that should run on a timer.</description></item><item><title>Read Intentionally</title><link>https://reflectoring.io/read-intentionally/</link><pubDate>Sun, 12 Sep 2021 09:00:00 +0000</pubDate><guid>https://reflectoring.io/read-intentionally/</guid><description>How many words are you reading every day?
As a software developer, I read a lot. And I&amp;rsquo;m pretty sure that I should read even more.</description></item><item><title>Publishing Metrics from Spring Boot to Amazon CloudWatch</title><link>https://reflectoring.io/spring-aws-cloudwatch/</link><pubDate>Tue, 07 Sep 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-aws-cloudwatch/</guid><description>Metrics provide a quantifiable measure of specific attributes of an application. A collection of different metrics give intelligent insights into the health and performance of an application.</description></item><item><title>Make it Easy</title><link>https://reflectoring.io/make-it-easy/</link><pubDate>Sun, 05 Sep 2021 09:00:00 +0000</pubDate><guid>https://reflectoring.io/make-it-easy/</guid><description>We like telling other people that we&amp;rsquo;re working hard. Hard work gains us respect. We just have to push through to get the results we want.</description></item><item><title>Rate-Limiting with Spring Boot and Resilience4j</title><link>https://reflectoring.io/rate-limiting-with-springboot-resilience4j/</link><pubDate>Thu, 02 Sep 2021 05:00:00 +0000</pubDate><guid>https://reflectoring.io/rate-limiting-with-springboot-resilience4j/</guid><description>In this series so far, we&amp;rsquo;ve learned how to use the Resilience4j Retry, RateLimiter, TimeLimiter, Bulkhead, Circuitbreaker core modules and seen its Spring Boot support for the Retry module.</description></item><item><title>Saving Time with Structured Logging</title><link>https://reflectoring.io/structured-logging/</link><pubDate>Mon, 30 Aug 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/structured-logging/</guid><description>Logging is the ultimate resource for investigating incidents and learning about what is happening within your application. Every application has logs of some type.</description></item><item><title>Validation with Spring Boot - the Complete Guide</title><link>https://reflectoring.io/bean-validation-with-spring-boot/</link><pubDate>Thu, 05 Aug 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/bean-validation-with-spring-boot/</guid><description>Bean Validation is the de-facto standard for implementing validation logic in the Java ecosystem. It&amp;rsquo;s well integrated with Spring and Spring Boot.</description></item><item><title>Complete Guide to CSRF/XSRF (Cross-Site Request Forgery)</title><link>https://reflectoring.io/complete-guide-to-csrf/</link><pubDate>Sat, 31 Jul 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/complete-guide-to-csrf/</guid><description>Protecting a web application against various security threats and attacks is vital for the health and reputation of any web application.</description></item><item><title>Retry with Spring Boot and Resilience4j</title><link>https://reflectoring.io/retry-with-springboot-resilience4j/</link><pubDate>Sat, 24 Jul 2021 05:00:00 +0000</pubDate><guid>https://reflectoring.io/retry-with-springboot-resilience4j/</guid><description>In this series so far, we have learned how to use the Resilience4j Retry, RateLimiter, TimeLimiter, Bulkhead, and Circuitbreaker core modules.</description></item><item><title>Testing with Spring Boot and @SpringBootTest</title><link>https://reflectoring.io/spring-boot-test/</link><pubDate>Thu, 22 Jul 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-test/</guid><description>With the @SpringBootTest annotation, Spring Boot provides a convenient way to start up an application context to be used in a test.</description></item><item><title>Per-Environment Logging with Plain Java and Spring Boot</title><link>https://reflectoring.io/profile-specific-logging-spring-boot/</link><pubDate>Wed, 21 Jul 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/profile-specific-logging-spring-boot/</guid><description>Application logs are the most important resource when it comes to investigating issues and incidents. Imagine something goes wrong during your on-call rotation and you don&amp;rsquo;t have any logs!</description></item><item><title>Complete Guide to CORS</title><link>https://reflectoring.io/complete-guide-to-cors/</link><pubDate>Sun, 18 Jul 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/complete-guide-to-cors/</guid><description>“CORS” stands for Cross-Origin Resource Sharing. CORS is a protocol and security standard for browsers that helps to maintain the integrity of a website and secure it from unauthorized access.</description></item><item><title>Feature Flags in Java with Togglz and LaunchDarkly</title><link>https://reflectoring.io/java-feature-flags/</link><pubDate>Sat, 17 Jul 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/java-feature-flags/</guid><description>With feature flags, we can reduce the risk of rolling out software changes to a minimum. We deploy the software with the changes, but the changes are behind a deactivated feature flag.</description></item><item><title>Sending Emails with Amazon SES and Spring Cloud AWS</title><link>https://reflectoring.io/spring-cloud-aws-ses/</link><pubDate>Sun, 27 Jun 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-cloud-aws-ses/</guid><description>Email is a convenient way to communicate different kinds of events from applications to interested parties.
Amazon Simple Email Service (SES) is an email platform that provides an easy and cost-effective way to send and receive emails.</description></item><item><title>Caching with ElastiCache for Redis and Spring Cloud AWS</title><link>https://reflectoring.io/spring-cloud-aws-redis/</link><pubDate>Sun, 27 Jun 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-cloud-aws-redis/</guid><description>ElastiCache is a fully managed caching service available in AWS Cloud.
Spring Cloud AWS helps us to simplify the communication of Spring Boot application with AWS services.</description></item><item><title>Start Clean!</title><link>https://reflectoring.io/start-clean/</link><pubDate>Mon, 21 Jun 2021 09:00:00 +0000</pubDate><guid>https://reflectoring.io/start-clean/</guid><description>As software developers, we&amp;rsquo;re painfully aware of technical debt.
Usually, we curse our predecessors for taking shortcuts, making wrong decisions, and for just not working professionally in general.</description></item><item><title>Getting Started with Apache Camel and Spring Boot</title><link>https://reflectoring.io/spring-camel/</link><pubDate>Mon, 21 Jun 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-camel/</guid><description>Apache Camel is an integration framework with a programming model for integrating a wide variety of applications.
It is also a good fit for microservice architectures where we need to communicate between different microservices and other upstream and downstream systems like databases and messaging systems.</description></item><item><title>Complete Guide to CSRF</title><link>https://reflectoring.io/complete-guide-to-csrf/</link><pubDate>Mon, 14 Jun 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/complete-guide-to-csrf/</guid><description>Protecting a web application against various security threats and attacks is vital for the health and security of a website. Cross Site Request Forgery (CSRF) is a type of such attack on websites.</description></item><item><title>Working with AWS DynamoDB and Spring</title><link>https://reflectoring.io/spring-dynamodb/</link><pubDate>Sun, 13 Jun 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-dynamodb/</guid><description>AWS DynamoDB is a NoSQL database service available in AWS Cloud.
DynamoDB provides many benefits starting from a flexible pricing model, stateless connection, and a consistent response time irrespective of the database size.</description></item><item><title>Testing with Spring Boot's @TestConfiguration Annotation</title><link>https://reflectoring.io/spring-boot-testconfiguration/</link><pubDate>Fri, 28 May 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-testconfiguration/</guid><description>A unit test is used to verify the smallest part of an application (a &amp;ldquo;unit&amp;rdquo;) independent of other parts. This makes the verification process easy and fast since the scope of the testing is narrowed down to a class or method.</description></item><item><title>Getting Started With AWS RDS and Spring Cloud</title><link>https://reflectoring.io/spring-cloud-aws-rds/</link><pubDate>Tue, 25 May 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-cloud-aws-rds/</guid><description>Amazon Relational Database Service (AWS RDS) is a relational database service available in AWS Cloud. The Spring Framework always had good support for database access technologies built on top of JDBC.</description></item><item><title>Sending HTTP requests with Spring WebClient</title><link>https://reflectoring.io/spring-webclient/</link><pubDate>Tue, 25 May 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-webclient/</guid><description>In Spring 5, Spring gained a reactive web framework: Spring WebFlux. This is designed to co-exist alongside the existing Spring Web MVC APIs, but to add support for non-blocking designs.</description></item><item><title>Book Notes: Measure What Matters</title><link>https://reflectoring.io/book-review-measure-what-matters/</link><pubDate>Tue, 11 May 2021 05:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-measure-what-matters/</guid><description>TL;DR: Read this Book, when&amp;hellip; you want to be structured in goal-making and tracking you want to learn about what motivates people and what doesn&amp;rsquo;t you are interested in hearing stories about the goals of big and successful companies Book Facts Title: Measure What Matters Authors: John Doerr Word Count: ~ 62,000 (ca.</description></item><item><title>Getting Started With AWS SQS and Spring Cloud</title><link>https://reflectoring.io/spring-cloud-aws-sqs/</link><pubDate>Mon, 10 May 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-cloud-aws-sqs/</guid><description>Spring Cloud is a suite of projects containing many of the services required to make an application cloud-native by conforming to the 12-Factor principles.</description></item><item><title>Securing Data in AWS</title><link>https://reflectoring.io/securing-data-on-aws/</link><pubDate>Fri, 07 May 2021 05:00:00 +0000</pubDate><guid>https://reflectoring.io/securing-data-on-aws/</guid><description>Amazon Web Services provide many possibilities to secure data in the cloud. In this article, we will have a closer look at how to encrypt different types of data at rest on AWS.</description></item><item><title>Creating and Analyzing Thread Dumps</title><link>https://reflectoring.io/analyzing-thread-dumps/</link><pubDate>Wed, 05 May 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/analyzing-thread-dumps/</guid><description>A thread is a basic path of execution in a program. Most of the applications we build today execute in a multi-threaded environment.</description></item><item><title>Designing an AWS CDK Project with Java</title><link>https://reflectoring.io/designing-a-aws-cdk-project/</link><pubDate>Mon, 03 May 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/designing-a-aws-cdk-project/</guid><description>In the article &amp;ldquo;Getting Started with AWS CDK&amp;rdquo;, we have already deployed a Spring Boot application to AWS with the CDK.</description></item><item><title>Exploring a Spring Boot App with Actuator and jq</title><link>https://reflectoring.io/exploring-a-spring-boot-app-with-actuator-and-jq/</link><pubDate>Fri, 30 Apr 2021 05:00:00 +0000</pubDate><guid>https://reflectoring.io/exploring-a-spring-boot-app-with-actuator-and-jq/</guid><description>Spring Boot Actuator helps us monitor and manage our applications in production. It exposes endpoints that provide health, metrics, and other information about the running application.</description></item><item><title>Clean Unit Tests with Mockito</title><link>https://reflectoring.io/clean-unit-tests-with-mockito/</link><pubDate>Sun, 25 Apr 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/clean-unit-tests-with-mockito/</guid><description>In this article we will learn how to mock objects with Mockito. We&amp;rsquo;ll first talk about what test doubles are and then how we can use them to create meaningful and tailored unit tests.</description></item><item><title>Using Terraform to Deploy AWS Resources</title><link>https://reflectoring.io/terraform-aws/</link><pubDate>Thu, 22 Apr 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/terraform-aws/</guid><description>Provisioning infrastructure resources has always been a time-consuming manual process. Infrastructure has now moved away from physical hardware in data centers to software-defined infrastructure using virtualization technology and cloud computing.</description></item><item><title>Getting Started With Java: Build a Robot Arena</title><link>https://reflectoring.io/first-java-program-robot-arena/</link><pubDate>Thu, 15 Apr 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/first-java-program-robot-arena/</guid><description>You are just beginning your programming career? Or you have dabbled a bit in programming but want to get into Java?</description></item><item><title>Using Maven's Bill of Materials (BOM)</title><link>https://reflectoring.io/maven-bom/</link><pubDate>Sat, 10 Apr 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/maven-bom/</guid><description>As Java developers, we may maintain many applications using Maven for their dependency management. These applications need upgrades from time to time to be up to date and to add new features or security updates.</description></item><item><title>Implementing Plugins with Java's Service Provider Interface</title><link>https://reflectoring.io/service-provider-interface/</link><pubDate>Fri, 26 Mar 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/service-provider-interface/</guid><description>In this article, we are going to talk about Java&amp;rsquo;s Service Provider Interface (SPI). We will have a short overview of what the SPI is and describe some cases where we can use it.</description></item><item><title>Don't Use the @Profile Annotation in a Spring Boot App!</title><link>https://reflectoring.io/dont-use-spring-profile-annotation/</link><pubDate>Sun, 21 Mar 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/dont-use-spring-profile-annotation/</guid><description>With profiles, Spring (Boot) provides a very powerful feature to configure our applications. Spring also offers the @Profile annotation to add beans to the application context only when a certain profile is active.</description></item><item><title>Deploying a Spring Boot App with the AWS CDK</title><link>https://reflectoring.io/deploy-spring-boot-app-with-aws-cdk/</link><pubDate>Sat, 06 Mar 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/deploy-spring-boot-app-with-aws-cdk/</guid><description>In the article &amp;ldquo;Getting Started with AWS CloudFormation&amp;rdquo;, we have already played around a bit with AWS CloudFormation. We have deployed a network stack that provides the network infrastructure we need, and a service stack that deploys a Docker image with our Spring Boot application into that network.</description></item><item><title>Creating and Analyzing Java Heap Dumps</title><link>https://reflectoring.io/create-analyze-heapdump/</link><pubDate>Mon, 01 Mar 2021 05:00:00 +0000</pubDate><guid>https://reflectoring.io/create-analyze-heapdump/</guid><description>As Java developers, we are familiar with our applications throwing OutOfMemoryErrors or our server monitoring tools throwing alerts and complaining about high JVM memory utilization.</description></item><item><title>Writing Meaningful Commit Messages</title><link>https://reflectoring.io/meaningful-commit-messages/</link><pubDate>Mon, 22 Feb 2021 05:00:00 +0000</pubDate><guid>https://reflectoring.io/meaningful-commit-messages/</guid><description>Writing meaningful commit messages can save a lot of time answering many &amp;ldquo;why?&amp;rdquo; and &amp;ldquo;how?&amp;rdquo; questions, and thus gives us more time in the day to do productive work.</description></item><item><title>Painless Code Formatting with EditorConfig</title><link>https://reflectoring.io/painless-code-formatting-with-editor-config/</link><pubDate>Mon, 15 Feb 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/painless-code-formatting-with-editor-config/</guid><description>Are you working on a project with other developers where reading code is not as fun as you would want because of inconsistent coding styles?</description></item><item><title>Getting Started with AWS S3 and Spring Boot</title><link>https://reflectoring.io/spring-boot-s3/</link><pubDate>Tue, 09 Feb 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-s3/</guid><description>In this article, we are going to explore AWS' Simple Storage Service (S3) together with Spring Boot to build a custom file-sharing application (just like in the good old days before Google Drive, Dropbox &amp;amp; co).</description></item><item><title>Handling Cookies with Spring Boot and the Servlet API</title><link>https://reflectoring.io/spring-boot-cookies/</link><pubDate>Mon, 01 Feb 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-cookies/</guid><description>This article is about cookies and different ways we can implement them in Spring Boot. We are going to have a short overview of what cookies are, how they work, and how we can handle them using the Servlet API and Spring Boot.</description></item><item><title>Book Notes: The Psychology of Money</title><link>https://reflectoring.io/book-review-psychology-of-money/</link><pubDate>Wed, 27 Jan 2021 05:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-psychology-of-money/</guid><description>TL;DR: Read this Book, when&amp;hellip; you want to start investing money, but don&amp;rsquo;t know how you want to confirm your investment mindset you enjoy reading a financial adviser&amp;rsquo;s view on investing money Book Facts Title: The Psychology of Money Authors: Morgan Housel Word Count: ~ 80,000 (ca.</description></item><item><title>The Open-Closed Principle Explained</title><link>https://reflectoring.io/open-closed-principle-explained/</link><pubDate>Mon, 25 Jan 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/open-closed-principle-explained/</guid><description>Robert C. Martin, maybe better known to you as „Uncle Bob“, has defined a set of principles for software engineering and software architecture.</description></item><item><title>Getting Started with GraphQL</title><link>https://reflectoring.io/getting-started-with-graphql/</link><pubDate>Wed, 20 Jan 2021 06:00:00 +0000</pubDate><guid>https://reflectoring.io/getting-started-with-graphql/</guid><description>GraphQL was developed by Facebook in 2012 for their mobile apps. It was open-sourced in 2015 and is now used by many development teams, including some prominent ones like GitHub, Twitter, and Airbnb.</description></item><item><title>Git Rebase vs. Git Merge Explained</title><link>https://reflectoring.io/git-rebase-merge/</link><pubDate>Thu, 14 Jan 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/git-rebase-merge/</guid><description>In this article, we are going to discuss some very important commands from Git and how they make the life of developers easy - working individually or in a team.</description></item><item><title>Book Notes: Hell Yeah or No</title><link>https://reflectoring.io/book-review-hell-yeah-or-no/</link><pubDate>Sat, 09 Jan 2021 05:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-hell-yeah-or-no/</guid><description>TL;DR: Read this Book, when&amp;hellip; you&amp;rsquo;re looking for some guiding principals you want to trigger some thoughts about what is worth doing and what isn&amp;rsquo;t you enjoy reading about a maker&amp;rsquo;s decisions Book Facts Title: Hell Yeah or No Authors: Derek Sivers Word Count: ~ 25.</description></item><item><title>Getting Started with AWS CloudFormation</title><link>https://reflectoring.io/getting-started-with-aws-cloudformation/</link><pubDate>Sun, 03 Jan 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/getting-started-with-aws-cloudformation/</guid><description>Continuous deployment is an important part in today&amp;rsquo;s software development loop. We want to ship the latest version of our software in no time to provide our users with the newest features or bugfixes.</description></item><item><title>Reflectoring Review 2020 - Being Serious About Passive Income</title><link>https://reflectoring.io/blog-review-2020/</link><pubDate>Sat, 02 Jan 2021 00:00:00 +0000</pubDate><guid>https://reflectoring.io/blog-review-2020/</guid><description>It&amp;rsquo;s the time of the year again to look back at what I have achieved in the last year and to look forward to what I want to achieve in the upcoming year.</description></item><item><title>Complete Guide to Exception Handling in Spring Boot</title><link>https://reflectoring.io/spring-boot-exception-handling/</link><pubDate>Thu, 31 Dec 2020 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-exception-handling/</guid><description>Handling exceptions is an important part of building a robust application. Spring Boot offers more than one way of doing it.</description></item><item><title>Implementing a Circuit Breaker with Resilience4j</title><link>https://reflectoring.io/circuitbreaker-with-resilience4j/</link><pubDate>Mon, 21 Dec 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/circuitbreaker-with-resilience4j/</guid><description>In this series so far, we have learned about Resilience4j and its Retry, RateLimiter, TimeLimiter, and Bulkhead modules. In this article, we will explore the CircuitBreaker module.</description></item><item><title>Using Elasticsearch with Spring Boot</title><link>https://reflectoring.io/spring-boot-elasticsearch/</link><pubDate>Fri, 18 Dec 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-elasticsearch/</guid><description>Elasticsearch is built on top of Apache Lucene and was first released by Elasticsearch N.V. (now Elastic) in 2010. According to the website of Elastic, it is a distributed open-source search and analytics engine for all types of data, including textual, numerical, geospatial, structured, and unstructured.</description></item><item><title>Book Notes: Make Time</title><link>https://reflectoring.io/book-review-make-time/</link><pubDate>Tue, 15 Dec 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-make-time/</guid><description>TL;DR: Read this Book, when&amp;hellip; you want to make time for important things you want to replace busyness with meaningful tasks you want to try out a framework to change your defaults (habits) Book Facts Title: Make Time Authors: Jake Knapp and John Zeratsky Word Count: ~ 60.</description></item><item><title>Building Reusable Mock Modules with Spring Boot</title><link>https://reflectoring.io/spring-boot-modules-mocking/</link><pubDate>Tue, 08 Dec 2020 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-modules-mocking/</guid><description>Wouldn&amp;rsquo;t it be nice to have a codebase that is cut into loosely coupled modules, with each module having a dedicated set of responsibilities?</description></item><item><title>Book Notes: Pragmatic Thinking &amp; Learning</title><link>https://reflectoring.io/book-review-pragmatic-thinking/</link><pubDate>Thu, 26 Nov 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-pragmatic-thinking/</guid><description>TL;DR: Read this Book, when&amp;hellip; you want to become a more structured learner you need some tips and tricks on tapping your creativity you want to become more self-aware of your proficiency Book Facts Title: Pragmatic Thinking &amp;amp; Learning Authors: Andy Hunt Word Count: ~ 80.</description></item><item><title>Getting Started with Spring Data Specifications</title><link>https://reflectoring.io/spring-data-specifications/</link><pubDate>Mon, 16 Nov 2020 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-data-specifications/</guid><description>If you are looking for a better way to manage your queries or want to generate dynamic and typesafe queries then you might find your solution in Spring Data JPA Specifications.</description></item><item><title>Managing Multiple JDK Installations With SDKMAN!</title><link>https://reflectoring.io/manage-jdks-with-sdkman/</link><pubDate>Sat, 07 Nov 2020 00:00:00 +0000</pubDate><guid>https://reflectoring.io/manage-jdks-with-sdkman/</guid><description>In the world of microservices and the 6-month release cycle of Java, we often have to change between Java versions multiple times a day.</description></item><item><title>12 Factor Apps with Spring Boot</title><link>https://reflectoring.io/spring-boot-12-factor-app/</link><pubDate>Thu, 05 Nov 2020 06:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-12-factor-app/</guid><description>The Twelve-Factor App is a set of guidelines for building cloud-native applications. By cloud-native, we will mean an application that is portable across environments, easy to update, and scalable enough to take advantage of the elastic capabilities of the cloud.</description></item><item><title>Managing Multiple JDK Installations With jEnv</title><link>https://reflectoring.io/manage-jdks-with-jenv/</link><pubDate>Sat, 24 Oct 2020 00:00:00 +0000</pubDate><guid>https://reflectoring.io/manage-jdks-with-jenv/</guid><description>As developers, we&amp;rsquo;re often working on different codebases at the same time. Especially in environments with microservices, we may be switching codebases multiple times a day.</description></item><item><title>Book Notes: Essentialism</title><link>https://reflectoring.io/book-review-essentialism/</link><pubDate>Wed, 21 Oct 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-essentialism/</guid><description>TL;DR: Read this Book, when&amp;hellip; you feel you&amp;rsquo;re busy, but not productive you&amp;rsquo;re stretched thin between many different commitments you need arguments to say &amp;ldquo;no&amp;rdquo; to the next person asking you to do something Book Facts Title: Essentialism Authors: Greg McKeown Word Count: ~ 90.</description></item><item><title>Full-Text Search with Hibernate Search and Spring Boot</title><link>https://reflectoring.io/hibernate-search/</link><pubDate>Wed, 07 Oct 2020 00:00:00 +0000</pubDate><guid>https://reflectoring.io/hibernate-search/</guid><description>If you want to integrate extensive full-text search features in your Spring Boot application without having to make major changes, Hibernate Search may be a way to go.</description></item><item><title>Processing Files With Java 8 Streams</title><link>https://reflectoring.io/processing-files-using-java-8-streams/</link><pubDate>Wed, 30 Sep 2020 06:00:00 +0000</pubDate><guid>https://reflectoring.io/processing-files-using-java-8-streams/</guid><description>Streams, introduced in Java 8, use functional-style operations to process data declaratively. The elements of streams are consumed from data sources such as collections, arrays, or I/O resources like files.</description></item><item><title>Component Scanning with Spring Boot</title><link>https://reflectoring.io/spring-component-scanning/</link><pubDate>Thu, 24 Sep 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-component-scanning/</guid><description>In this article, we&amp;rsquo;ll look at Spring component scanning and how to use it. We&amp;rsquo;ll be using a Spring Boot application for all our examples throughout this article.</description></item><item><title>Health Checks with Spring Boot</title><link>https://reflectoring.io/spring-boot-health-check/</link><pubDate>Tue, 22 Sep 2020 06:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-health-check/</guid><description>Monitoring and observability are essential in distributed environments and they rely on effective health checking mechanisms that can be observed at runtime.</description></item><item><title>Implementing Bulkhead with Resilience4j</title><link>https://reflectoring.io/bulkhead-with-resilience4j/</link><pubDate>Thu, 17 Sep 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/bulkhead-with-resilience4j/</guid><description>In this series so far, we have learned about Resilience4j and its Retry, RateLimiter, and TimeLimiter modules. In this article, we will explore the Bulkhead module.</description></item><item><title>Creating Optimized Docker Images for a Spring Boot Application</title><link>https://reflectoring.io/spring-boot-docker/</link><pubDate>Sat, 05 Sep 2020 06:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-docker/</guid><description>Containers have emerged as the preferred means of packaging an application with all the software and operating system dependencies and then shipping that across to different environments.</description></item><item><title>Logging In Spring Boot</title><link>https://reflectoring.io/springboot-logging/</link><pubDate>Mon, 24 Aug 2020 06:00:00 +0000</pubDate><guid>https://reflectoring.io/springboot-logging/</guid><description>Logging is a vital part of all applications and brings benefits not only to us developers but also to ops and business people.</description></item><item><title>Implementing Timeouts with Resilience4j</title><link>https://reflectoring.io/time-limiting-with-resilience4j/</link><pubDate>Tue, 18 Aug 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/time-limiting-with-resilience4j/</guid><description>In this series so far, we have learned about Resilience4j and its Retry and RateLimiter modules. In this article, we will continue exploring Resilience4j with a look into the TimeLimiter.</description></item><item><title>Optimize Your Dev Loop with Spring Boot Dev Tools</title><link>https://reflectoring.io/spring-boot-dev-tools/</link><pubDate>Thu, 13 Aug 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-dev-tools/</guid><description>What are you doing when you&amp;rsquo;ve made a change to a Spring Boot app and want to test it?
You probably restart it and go get a coffee or swipe through your Twitter feed until it&amp;rsquo;s up and running again.</description></item><item><title>Hooking Into the Spring Bean Lifecycle</title><link>https://reflectoring.io/spring-bean-lifecycle/</link><pubDate>Tue, 11 Aug 2020 06:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-bean-lifecycle/</guid><description>Providing an Inversion-of-Control Container is one of the core provisions of the Spring Framework. Spring orchestrates the beans in its application context and manages their lifecycle.</description></item><item><title>Implementing Rate Limiting with Resilience4j</title><link>https://reflectoring.io/rate-limiting-with-resilience4j/</link><pubDate>Wed, 05 Aug 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/rate-limiting-with-resilience4j/</guid><description>In the previous article in this series, we learned about Resilience4j and how to use its Retry module. Let&amp;rsquo;s now learn about the RateLimiter - what it is, when and how to use it, and what to watch out for when implementing rate limiting (or &amp;ldquo;throttling&amp;rdquo;, as it&amp;rsquo;s also called).</description></item><item><title>Request/Response Pattern with Spring AMQP</title><link>https://reflectoring.io/amqp-request-response/</link><pubDate>Mon, 03 Aug 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/amqp-request-response/</guid><description>The request/response pattern is well-known and widely used, mainly in synchronous communication. This article shows how to implement this pattern asynchronously with a message broker using the AMQP protocol and Spring Boot.</description></item><item><title>Run Your Maven Build Anywhere with the Maven Wrapper</title><link>https://reflectoring.io/maven-wrapper/</link><pubDate>Wed, 29 Jul 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/maven-wrapper/</guid><description>In this article, we&amp;rsquo;ll learn about the Maven Wrapper - what problem it solves, how to set it up, and how it works.</description></item><item><title>Local Development with AWS on LocalStack</title><link>https://reflectoring.io/aws-localstack/</link><pubDate>Mon, 27 Jul 2020 06:00:00 +0000</pubDate><guid>https://reflectoring.io/aws-localstack/</guid><description>When we build applications with AWS, we access various AWS services for multiple purposes: store files in S3, save some data in DynamoDB, send messages to SQS, write event handlers with lambda functions, and many others.</description></item><item><title>Using Kafka with Spring Boot</title><link>https://reflectoring.io/spring-boot-kafka/</link><pubDate>Wed, 22 Jul 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-kafka/</guid><description>In this article, we&amp;rsquo;ll look at how to integrate a Spring Boot application with Apache Kafka and start sending and consuming messages from our application.</description></item><item><title>Implementing Retry with Resilience4j</title><link>https://reflectoring.io/retry-with-resilience4j/</link><pubDate>Thu, 16 Jul 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/retry-with-resilience4j/</guid><description>In this article, we&amp;rsquo;ll start with a quick intro to Resilience4j and then deep dive into its Retry module. We&amp;rsquo;ll learn when and how to use it, and what features it provides.</description></item><item><title>The AWS Journey Part 4: Zero-Downtime Deployment with CloudFormation and ECS</title><link>https://reflectoring.io/aws-cloudformation-ecs-deployment/</link><pubDate>Mon, 13 Jul 2020 06:00:00 +0000</pubDate><guid>https://reflectoring.io/aws-cloudformation-ecs-deployment/</guid><description>The AWS journey started with deploying a Spring Boot application in a Docker container manually and we continued with automatically deploying it with CloudFormation and connecting it to an RDS database instance.</description></item><item><title>The Liskov Substitution Principle Explained</title><link>https://reflectoring.io/lsp-explained/</link><pubDate>Mon, 06 Jul 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/lsp-explained/</guid><description>This article gives a quick intro to the Liskov Substitution Principle (LSP), why it&amp;rsquo;s important, and how to use it to validate object-oriented designs.</description></item><item><title>What is AWS? A High-Level Overview of the Most Important AWS Services</title><link>https://reflectoring.io/what-is-aws/</link><pubDate>Tue, 30 Jun 2020 06:00:00 +0000</pubDate><guid>https://reflectoring.io/what-is-aws/</guid><description>AWS (Amazon Web Services) is a cloud computing platform with a wide portfolio of services like compute, storage, networking, data, security, and many more.</description></item><item><title>Implementing a Cache with Spring Boot</title><link>https://reflectoring.io/spring-boot-cache/</link><pubDate>Sat, 27 Jun 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-cache/</guid><description>We use a cache to protect the database or to avoid cost-intensive calculations. Spring provides an abstraction layer for implementing a cache.</description></item><item><title>Distributed Cache with Hazelcast and Spring</title><link>https://reflectoring.io/spring-boot-hazelcast/</link><pubDate>Thu, 04 Jun 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-hazelcast/</guid><description>In some applications, we need to protect the database or avoid cost-intensive calculations. We can use a cache for this goal.</description></item><item><title>Validate Spring Boot Configuration Parameters at Startup</title><link>https://reflectoring.io/validate-spring-boot-configuration-parameters-at-startup/</link><pubDate>Thu, 28 May 2020 06:00:00 +0000</pubDate><guid>https://reflectoring.io/validate-spring-boot-configuration-parameters-at-startup/</guid><description>One of the important steps to keep software applications customizable is effective configuration management. Modern frameworks provide out-of-the-box features to externalize configuration parameters.</description></item><item><title>The AWS Journey Part 3: Connecting a Spring Boot Application to an RDS Instance with CloudFormation</title><link>https://reflectoring.io/aws-cloudformation-rds/</link><pubDate>Tue, 19 May 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/aws-cloudformation-rds/</guid><description>The AWS journey started with deploying a Spring Boot application in a Docker container manually. In the previous episode, we then automated the deployment with CloudFormation.</description></item><item><title>Book Notes: Accelerate</title><link>https://reflectoring.io/book-review-accelerate/</link><pubDate>Fri, 15 May 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-accelerate/</guid><description>TL;DR: Read this Book, when&amp;hellip; you want to know what makes software teams (and their companies) successful you need arguments for moving towards DevOps you are interested in the science behind a survey Book Facts Title: Accelerate Authors: Nicole Forsgren, Jez Humble, and Gene Kim Word Count: ~ 55.</description></item><item><title>Testing Database Migration Scripts with Spring Boot and Testcontainers</title><link>https://reflectoring.io/spring-boot-flyway-testcontainers/</link><pubDate>Fri, 08 May 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-flyway-testcontainers/</guid><description>Database migration with tools like Flyway or Liquibase requires creating SQL scripts and running them on a database. Although the database is an external dependency, we have to test the SQL scripts, because it is our code.</description></item><item><title>The AWS Journey Part 2: Deploying a Docker Image with AWS CloudFormation</title><link>https://reflectoring.io/aws-cloudformation-deploy-docker-image/</link><pubDate>Sat, 02 May 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/aws-cloudformation-deploy-docker-image/</guid><description>In the first article of my AWS Journey, we deployed a Docker image via the AWS web console. While this works fine, it includes manual work and doesn&amp;rsquo;t provide fine-grained control over the network and other resources we might need.</description></item><item><title>One-Stop Guide to Database Migration with Liquibase and Spring Boot</title><link>https://reflectoring.io/database-migration-spring-boot-liquibase/</link><pubDate>Wed, 15 Apr 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/database-migration-spring-boot-liquibase/</guid><description>Spring Boot provides integration with database migration tools Liquibase and Flyway. This guide provides an overview of Liquibase and how to use it in a Spring Boot application for managing and applying database schema changes.</description></item><item><title>Building a Robust SQS Client with Spring Boot</title><link>https://reflectoring.io/spring-robust-sqs-client/</link><pubDate>Mon, 13 Apr 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-robust-sqs-client/</guid><description>I mistrust tools and products that have the word &amp;ldquo;simple&amp;rdquo; in their name. This was also the case when I had First Contact with AWS&amp;rsquo;s &amp;ldquo;Simple Queue Service&amp;rdquo; or SQS.</description></item><item><title>Book Notes: The Nature of Software Development</title><link>https://reflectoring.io/book-review-nature-of-software-development/</link><pubDate>Wed, 01 Apr 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-nature-of-software-development/</guid><description>TL;DR: Read this Book, when&amp;hellip; you&amp;rsquo;re a manager, you don&amp;rsquo;t know much about software development and want to learn about agile software development you haven&amp;rsquo;t worked in an agile manner before and want to know the key methods you have worked in an agile manner before and want some re-affirmation that you&amp;rsquo;re doing the right thing Book Facts Title: The Nature of Software Development Author: Ron Jeffries Word Count: ~ 20.</description></item><item><title>Spring Boot Application Events Explained</title><link>https://reflectoring.io/spring-boot-application-events-explained/</link><pubDate>Tue, 31 Mar 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-application-events-explained/</guid><description>To &amp;ldquo;listen&amp;rdquo; to an event, we can always write the &amp;ldquo;listener&amp;rdquo; to an event as another method within the source of the event, but this will tightly couple the event source to the logic of the listener.</description></item><item><title>Why You Should Use Constructor Injection in Spring</title><link>https://reflectoring.io/constructor-injection/</link><pubDate>Sat, 28 Mar 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/constructor-injection/</guid><description>Dependency injection is an approach to implement loose coupling among the classes in an application.
There are different ways of injecting dependencies and this article explains why constructor injection should be the preferred way.</description></item><item><title>My System for Organizing Work in a Distracted World</title><link>https://reflectoring.io/organizing-work/</link><pubDate>Sun, 22 Mar 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/organizing-work/</guid><description>As knowledge workers, we software developers are very vulnerable to distractions. Have you counted the number of context switches you&amp;rsquo;ve had today?</description></item><item><title>Clean Architecture Boundaries with Spring Boot and ArchUnit</title><link>https://reflectoring.io/java-components-clean-boundaries/</link><pubDate>Sat, 14 Mar 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/java-components-clean-boundaries/</guid><description>When we&amp;rsquo;re building software, we want to build for &amp;ldquo;-ilities&amp;rdquo;: understandability, maintainability, extensibility, and - trending right now - decomposability (so we can decompose a monolith into microservices if the need arises).</description></item><item><title>API-First Development with Spring Boot and Swagger</title><link>https://reflectoring.io/spring-boot-openapi/</link><pubDate>Thu, 12 Mar 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-openapi/</guid><description>Following an API-first approach, we specify an API before we start coding. Via API description languages, teams can collaborate without having implemented anything, yet.</description></item><item><title>Custom Web Controller Arguments with Spring MVC and Spring Boot</title><link>https://reflectoring.io/spring-boot-argumentresolver/</link><pubDate>Fri, 06 Mar 2020 06:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-argumentresolver/</guid><description>Spring MVC provides a very convenient programming model for creating web controllers. We declare a method signature and the method arguments will be resolved automatically by Spring.</description></item><item><title>Handling Passwords with Spring Boot and Spring Security</title><link>https://reflectoring.io/spring-security-password-handling/</link><pubDate>Wed, 04 Mar 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-security-password-handling/</guid><description>Systems with user management require authentication. If we use password-based authentication, we have to handle users' passwords in our system. This article shows how to encode and store passwords securely with Spring Security.</description></item><item><title>Interface Segregation Principle: Everything You Need to Know</title><link>https://reflectoring.io/interface-segregation-principle/</link><pubDate>Tue, 03 Mar 2020 06:00:00 +0000</pubDate><guid>https://reflectoring.io/interface-segregation-principle/</guid><description>&amp;ldquo;Clients should not be forced to depend upon interfaces that they do not use.&amp;rdquo; — Robert Martin, paper &amp;ldquo;The Interface Segregation Principle&amp;rdquo;</description></item><item><title>Single Responsibility Principle Unpacked</title><link>https://reflectoring.io/single-responsibility-principle/</link><pubDate>Wed, 26 Feb 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/single-responsibility-principle/</guid><description>This article explains the Single Responsibility Principle (SRP): what does it practically mean? And when and how should we apply it?</description></item><item><title>Book Notes: Mindset</title><link>https://reflectoring.io/book-review-mindset/</link><pubDate>Tue, 25 Feb 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-mindset/</guid><description>TL;DR: Read this Book, when&amp;hellip; you always wanted to know what your HR people mean when they say &amp;ldquo;we should all have a growth mindset&amp;rdquo; you are looking for a shift of your mindset towards learning you want to read stories about important people and what effects their mindset have on their environments Book Facts Title: Mindset Author: Carol S.</description></item><item><title>One-Stop Guide to Database Migration with Flyway and Spring Boot</title><link>https://reflectoring.io/database-migration-spring-boot-flyway/</link><pubDate>Fri, 21 Feb 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/database-migration-spring-boot-flyway/</guid><description>Spring Boot simplifies database migrations by providing integration with Flyway, one of the most widely used database migration tools. This guide presents various options of using Flyway as part of a Spring Boot application, as well as running it within a CI build.</description></item><item><title>The AWS Journey Part 1: Deploying Your First Docker Image</title><link>https://reflectoring.io/aws-deploy-docker-image-via-web-console/</link><pubDate>Sat, 15 Feb 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/aws-deploy-docker-image-via-web-console/</guid><description>Amazon Web Services is a beast. It offers so many different cloud services that my natural reaction was to be intimidated.</description></item><item><title>Spring Boot Application Events Explained</title><link>https://reflectoring.io/spring-boot-application-events-explained/</link><pubDate>Thu, 13 Feb 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-application-events-explained/</guid><description>To &amp;ldquo;listen&amp;rdquo; to an event, we can always write &amp;ldquo;listener&amp;rdquo; to an event as another method within the source of the event, but this will tightly couple the event source to the logic of the listener.</description></item><item><title>Multitenancy Applications with Spring Boot and Flyway</title><link>https://reflectoring.io/flyway-spring-boot-multitenancy/</link><pubDate>Tue, 04 Feb 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/flyway-spring-boot-multitenancy/</guid><description>Multitenancy applications allow different customers to work with the same application without seeing each other&amp;rsquo;s data. That means we have to set up a separate data store for each tenant.</description></item><item><title>Reactive Multi-Threading with RxJava - Pitfalls and Solutions</title><link>https://reflectoring.io/rxjava-reactive-batch-processing/</link><pubDate>Mon, 03 Feb 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/rxjava-reactive-batch-processing/</guid><description>I recently had a rough time refactoring a multi-threaded, reactive message processor. It just didn&amp;rsquo;t seem to be working the way I expected.</description></item><item><title>Book Review: Atomic Habits</title><link>https://reflectoring.io/book-review-atomic-habits/</link><pubDate>Sat, 18 Jan 2020 06:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-atomic-habits/</guid><description>TL;DR: Read this Book, when&amp;hellip; you want to raise your awareness of your habits you are looking for a framework to help in starting or stopping habits you enjoy real-world stories about habits Overview {% include book-link.</description></item><item><title>Continuous Database Configuration with Flyway and Kubernetes</title><link>https://reflectoring.io/flyway-kubernetes-continuous-database-configuration/</link><pubDate>Wed, 15 Jan 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/flyway-kubernetes-continuous-database-configuration/</guid><description>Self-contained systems (SCS) are systems that have no tight coupling to other systems. They can be developed, deployed and operated on their own.</description></item><item><title>On Blogging, Writing, and Habits: This Was 2019</title><link>https://reflectoring.io/review-2019/</link><pubDate>Sat, 11 Jan 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/review-2019/</guid><description>There it is. 2019 is gone. 2020 is here. I feel old.
As I did last year, I take this time to reflect on my year 2019 and to set some plans for 2020.</description></item><item><title>One-Stop Guide to Profiles with Spring Boot</title><link>https://reflectoring.io/spring-boot-profiles/</link><pubDate>Thu, 02 Jan 2020 05:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-profiles/</guid><description>Spring provides a mighty tool for grouping configuration properties into so-called profiles, allowing us to activate a bunch of configurations with a single profile parameter.</description></item><item><title>Insights from YOW! 2019</title><link>https://reflectoring.io/yow2019-report/</link><pubDate>Thu, 12 Dec 2019 06:00:00 +0000</pubDate><guid>https://reflectoring.io/yow2019-report/</guid><description>I visited the YOW! conference in Sydney in December 2019. What better way to persist what I learned than in a blog post?</description></item><item><title>Executing Code on Spring Boot Application Startup</title><link>https://reflectoring.io/spring-boot-execute-on-startup/</link><pubDate>Mon, 02 Dec 2019 06:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-execute-on-startup/</guid><description>Sometimes we just need to run a snippet of code on application startup, be it only to log that a certain bean has loaded or the application is ready to process requests.</description></item><item><title>Book Review: Clean Code</title><link>https://reflectoring.io/book-review-clean-code/</link><pubDate>Tue, 19 Nov 2019 06:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-clean-code/</guid><description>TL;DR: Read this Book, when&amp;hellip; you&amp;rsquo;re new to programming and want to learn some coding best practices you&amp;rsquo;re a coding veteran and want to confirm your own coding best practices you met a &amp;ldquo;Clean Code&amp;rdquo; fanatic and want to check out if the book really is as black-and-white as they are preaching (this was my main reason to read it) Overview I guess {% include book-link.</description></item><item><title>Static Data with Spring Boot</title><link>https://reflectoring.io/spring-boot-static-data/</link><pubDate>Tue, 12 Nov 2019 06:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-static-data/</guid><description>Sometimes we need some structured, static data in our application. Perhaps the static data is a workaround until we have built the full feature that stores the data in the database and allows users to maintain the data themselves.</description></item><item><title>Hexagonal Architecture with Java and Spring</title><link>https://reflectoring.io/spring-hexagonal/</link><pubDate>Sun, 03 Nov 2019 10:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-hexagonal/</guid><description>The term &amp;ldquo;Hexagonal Architecture&amp;rdquo; has been around for a long time. Long enough that the primary source on this topic has been offline for a while and has only recently been rescued from the archives.</description></item><item><title>Immutables in Java - Are Setters Allowed?</title><link>https://reflectoring.io/java-immutables/</link><pubDate>Wed, 25 Sep 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/java-immutables/</guid><description>In short, no. Feel free to jump right ahead to the section on bad practices. If you want to read a bit more on the why and how of immutables, have a look at the rest of this article.</description></item><item><title>Mocking with (and without) Spring Boot</title><link>https://reflectoring.io/spring-boot-mock/</link><pubDate>Wed, 18 Sep 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-mock/</guid><description>Mockito is a very popular library to support testing. It allows us to replace real objects with &amp;ldquo;mocks&amp;rdquo;, i.e. with objects that are not the real thing and whose behavior we can control within our test.</description></item><item><title>Book Review: Shape Up</title><link>https://reflectoring.io/book-review-shape-up/</link><pubDate>Wed, 11 Sep 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-shape-up/</guid><description>TL;DR: Read this Book, when&amp;hellip; you want to know how Basecamp builds software with bets instead of estimation you are interested in an agile process beyond Scrum &amp;amp; Co.</description></item><item><title>Bean Validation Anti-Patterns</title><link>https://reflectoring.io/bean-validation-anti-patterns/</link><pubDate>Sat, 07 Sep 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/bean-validation-anti-patterns/</guid><description>Bean Validation is the de-facto standard for implementing validation logic in the Java ecosystem and it&amp;rsquo;s a great tool to have around.</description></item><item><title>Book Review: The Power of Habit</title><link>https://reflectoring.io/book-review-the-power-of-habit/</link><pubDate>Mon, 02 Sep 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-the-power-of-habit/</guid><description>TL;DR: Read this Book, when&amp;hellip; you are interested in how habits work in individuals, organizations, and societies you want to trigger some self-reflection on your habits you enjoy real-life stories that read like a novel Overview Similar to The 7 Habits of Highly Effective People, I read {% include book-link.</description></item><item><title>Quick Guide to Building a Spring Boot Starter</title><link>https://reflectoring.io/spring-boot-starter/</link><pubDate>Fri, 30 Aug 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-starter/</guid><description>There are certain cross-cutting concerns that we don&amp;rsquo;t want to implement from scratch for each Spring Boot application we&amp;rsquo;re building. Instead, we want to implement those features once and include them into any application as needed.</description></item><item><title>Pollution-Free Dependency Management with Gradle</title><link>https://reflectoring.io/gradle-pollution-free-dependencies/</link><pubDate>Sun, 28 Jul 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/gradle-pollution-free-dependencies/</guid><description>Remember the days when we had to manually download every single JAR file that our project needed to run? And not only the JAR files we directly depended upon, mind you, but even those JAR files that our dependencies and our dependencies' dependencies needed to work!</description></item><item><title>Maven Scopes and Gradle Configurations Explained</title><link>https://reflectoring.io/maven-scopes-gradle-configurations/</link><pubDate>Wed, 24 Jul 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/maven-scopes-gradle-configurations/</guid><description>table th:first-of-type { width: 40%; } One of the key features of a build tool for Java is dependency management.</description></item><item><title>Book Review: Everybody Writes</title><link>https://reflectoring.io/book-review-everybody-writes/</link><pubDate>Wed, 17 Jul 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-everybody-writes/</guid><description>TL;DR: Read this Book, when&amp;hellip; you want to become a better writer (especially, but not exclusively, in online marketing) you are writing for a blog or marketing department you want to learn some tricks on how to keep writing Overview The book {% include book-link.</description></item><item><title>Building a Multi-Module Spring Boot Application with Gradle</title><link>https://reflectoring.io/spring-boot-gradle-multi-module/</link><pubDate>Fri, 28 Jun 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-gradle-multi-module/</guid><description>The Spring Initializr is a great way to quickly create a Spring Boot application from scratch. It creates a single Gradle file that we can expand upon to grow our application.</description></item><item><title>Book Review: The 7 Habits of Highly Effective People</title><link>https://reflectoring.io/book-review-7-habits/</link><pubDate>Wed, 26 Jun 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-7-habits/</guid><description>TL;DR: Read this Book, when&amp;hellip; you&amp;rsquo;re ready to change the way you think about your interaction with the world around you you want to be more effective in communicating with those around you you want to learn some motives why you should change your habits Overview I read the book &amp;ldquo;The 7 Habits of Highly Effective People&amp;rdquo; by Stephen Covey in my quest to shape my habits to be more productive at the things I do.</description></item><item><title>5 Reasons Why Business Exceptions Are a Bad Idea</title><link>https://reflectoring.io/business-exceptions/</link><pubDate>Tue, 04 Jun 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/business-exceptions/</guid><description>I recently had a conversation about exception handling. I argued that business exceptions are a good thing because they clearly mark the possible failures of a business method.</description></item><item><title>Book Review: Deep Work</title><link>https://reflectoring.io/book-review-deep-work/</link><pubDate>Sun, 12 May 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-deep-work/</guid><description>TL;DR: Read this Book, when&amp;hellip; you want to get more productive at knowledge work (yes, software development is knowledge work!</description></item><item><title>Paging with Spring Boot</title><link>https://reflectoring.io/spring-boot-paging/</link><pubDate>Sun, 31 Mar 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-paging/</guid><description>As a user of a web application we&amp;rsquo;re expecting pages to load quickly and only show the information that&amp;rsquo;s relevant to us.</description></item><item><title>Configuring a Spring Boot Module with @ConfigurationProperties</title><link>https://reflectoring.io/spring-boot-configuration-properties/</link><pubDate>Mon, 18 Mar 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-configuration-properties/</guid><description>Every application above play size requires some parameters at startup. These parameters may, for instance, define which database to connect to, which locale to support or which logging level to apply.</description></item><item><title>Conditional Beans with Spring Boot</title><link>https://reflectoring.io/spring-boot-conditionals/</link><pubDate>Thu, 07 Mar 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-conditionals/</guid><description>When building a Spring Boot app, we sometimes want to only load beans or modules into the application context if some condition is met.</description></item><item><title>Book Review: Your Code as a Crime Scene</title><link>https://reflectoring.io/book-review-your-code-as-a-crime-scene/</link><pubDate>Sun, 17 Feb 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-your-code-as-a-crime-scene/</guid><description>TL;DR: Read this Book, when&amp;hellip; you are interested in metrics by which to evaluate a codebase or even organizational behavior of a development team you want to know how to gather those metrics you have a certain codebase that you want to analyze Overview Your Code as a Crime Scene by Adam Tornhill is a book that aims to apply criminal investigation techniques to a codebase in order to gain insights about the structure and quality of the code.</description></item><item><title>Testing JPA Queries with Spring Boot and @DataJpaTest</title><link>https://reflectoring.io/spring-boot-data-jpa-test/</link><pubDate>Sun, 03 Feb 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-data-jpa-test/</guid><description>Aside from unit tests, integration tests play a vital role in producing quality software. A special kind of integration test deals with the integration between our code and the database.</description></item><item><title>Book Review: Java by Comparison</title><link>https://reflectoring.io/book-review-java-by-comparison/</link><pubDate>Mon, 28 Jan 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-java-by-comparison/</guid><description>TL;DR: Read this Book, when&amp;hellip; you are starting with Java and want some advice for producing quality code you are teaching Java and want your students to learn best practices you are working with junior developers and want them to get them up to speed Overview In a nutshell, Java by Comparison by Simon Harrer, Jörg Lenhard, and Linus Dietz teaches best practices in the Java programming language.</description></item><item><title>Testing MVC Web Controllers with Spring Boot and @WebMvcTest</title><link>https://reflectoring.io/spring-boot-web-controller-test/</link><pubDate>Sat, 19 Jan 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-web-controller-test/</guid><description>In this second part of the series on testing with Spring Boot, we&amp;rsquo;re going to look at web controllers. First, we&amp;rsquo;re going to explore what a web controller actually does so that we can build tests that cover all of its responsibilities.</description></item><item><title>Unit Testing with Spring Boot</title><link>https://reflectoring.io/unit-testing-spring-boot/</link><pubDate>Sat, 12 Jan 2019 00:00:00 +0000</pubDate><guid>https://reflectoring.io/unit-testing-spring-boot/</guid><description>Writing good unit tests can be considered an art that is hard to master. But the good news is that the mechanics supporting it are easy to learn.</description></item><item><title>My Personal Review of 2018</title><link>https://reflectoring.io/review-2018/</link><pubDate>Mon, 31 Dec 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/review-2018/</guid><description>It&amp;rsquo;s easiest to review things if they are measured. So, in this post, I&amp;rsquo;ll try to measure as much of my year 2018 in hindsight to draw a conclusion to this year and then make plans for the next.</description></item><item><title>Implementing a Consumer-Driven Contract between a Node Message Consumer and a Node Message Producer</title><link>https://reflectoring.io/pact-node-messaging/</link><pubDate>Wed, 14 Nov 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/pact-node-messaging/</guid><description>Consumer-driven contract (CDC) tests are a technique to test integration points between API providers and API consumers without the hassle of end-to-end tests (read it up in a recent blog post).</description></item><item><title>Implementing a Consumer-Driven Contract for a GraphQL Consumer with Node and Apollo</title><link>https://reflectoring.io/pact-graphql-consumer/</link><pubDate>Sat, 10 Nov 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/pact-graphql-consumer/</guid><description>Consumer-driven contract (CDC) tests are a technique to test integration points between API providers and API consumers without the hassle of end-to-end tests (read it up in a recent blog post).</description></item><item><title>Implementing a Consumer-Driven Contract for a GraphQL Consumer with Node and Apollo</title><link>https://reflectoring.io/pact-node-graphql-consumer/</link><pubDate>Sat, 10 Nov 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/pact-node-graphql-consumer/</guid><description>Consumer-driven contract (CDC) tests are a technique to test integration points between API providers and API consumers without the hassle of end-to-end tests (read it up in a recent blog post).</description></item><item><title>Implementing a Consumer-Driven Contract for a GraphQL Provider with Node and Express</title><link>https://reflectoring.io/pact-node-graphql-provider/</link><pubDate>Sat, 10 Nov 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/pact-node-graphql-provider/</guid><description>Consumer-driven contract (CDC) tests are a technique to test integration points between API providers and API consumers without the hassle of end-to-end tests (read it up in a recent blog post).</description></item><item><title>Implementing a Consumer-Driven Contract for a Node Express Server with Pact</title><link>https://reflectoring.io/pact-node-provider/</link><pubDate>Sun, 28 Oct 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/pact-node-provider/</guid><description>Consumer-driven contract (CDC) tests are a technique to test integration points between API providers and API consumers without the hassle of end-to-end tests (read it up in a recent blog post).</description></item><item><title>Implementing a Consumer-Driven Contract for a React App with Pact and Jest</title><link>https://reflectoring.io/pact-react-consumer/</link><pubDate>Thu, 25 Oct 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/pact-react-consumer/</guid><description>Consumer-driven contract (CDC) tests are a technique to test integration points between API providers and API consumers without the hassle of end-to-end tests (read it up in a recent blog post).</description></item><item><title>3 Steps to Fix NoSuchMethodErrors and NoSuchMethodExceptions</title><link>https://reflectoring.io/nosuchmethod/</link><pubDate>Mon, 08 Oct 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/nosuchmethod/</guid><description>A NoSuchMethodError occurs when we&amp;rsquo;re calling a method that does not exist at runtime.
The method must have existed at compile time, since otherwise the compiler would have refused to compile the class calling that method with an error: cannot find symbol.</description></item><item><title>Definitive Guide to the JaCoCo Gradle Plugin</title><link>https://reflectoring.io/jacoco/</link><pubDate>Fri, 05 Oct 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/jacoco/</guid><description>As discussed in my article about 100% Code Coverage*, a code coverage tool should provide the means not only to measure code coverage, but also to enforce it.</description></item><item><title>What is Upstream and Downstream in Software Development?</title><link>https://reflectoring.io/upstream-downstream/</link><pubDate>Thu, 27 Sep 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/upstream-downstream/</guid><description>In the recent past, I stumbled a few times over the definition of the words &amp;ldquo;upstream&amp;rdquo; and &amp;ldquo;downstream&amp;rdquo; in various software development contexts.</description></item><item><title>Testing a Spring Message Producer and Consumer against a Contract with Pact</title><link>https://reflectoring.io/cdc-pact-messages/</link><pubDate>Thu, 13 Sep 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/cdc-pact-messages/</guid><description>Among other things, testing an interface between two systems with
(consumer-driven) contract tests is faster and more stable than doing so with end-to-end tests.</description></item><item><title>Build Once, Run Anywhere: Externalize Your Configuration</title><link>https://reflectoring.io/externalize-configuration/</link><pubDate>Sun, 09 Sep 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/externalize-configuration/</guid><description>Most software that does more than a &amp;ldquo;hello world&amp;rdquo; needs to be configured in some way or another in order to function in a certain environment.</description></item><item><title>Why You Should Enforce 100% Code Coverage*</title><link>https://reflectoring.io/percent-test-coverage/</link><pubDate>Sat, 01 Sep 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/percent-test-coverage/</guid><description>Yeah, I know. Everyone says aiming for 100% code coverage is bullshit.
And the way test coverage is usually defined, I fully agree!</description></item><item><title>Combining Object Mother and Fluent Builder for the Ultimate Test Data Factory</title><link>https://reflectoring.io/objectmother-fluent-builder/</link><pubDate>Fri, 31 Aug 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/objectmother-fluent-builder/</guid><description>To test our business code we always need some kind of test data. This tutorial explains how to do just that with the Object Mother pattern and why we should combine it with a Fluent Builder to create test data factories that are fun to work with.</description></item><item><title>Book Review: Clean Architecture by Robert C. Martin</title><link>https://reflectoring.io/book-review-clean-architecture/</link><pubDate>Sat, 25 Aug 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/book-review-clean-architecture/</guid><description>TL;DR: Read this Book, when&amp;hellip; you are interested in building maintainable software you need arguments to persuade your stakeholders to take some more time for creating quality software you want some inspiration on building applications in a different way than the default &amp;ldquo;3-layer architecture&amp;rdquo; Overview As the name suggests, Clean Architecture - A Craftsman&amp;rsquo;s Guide to Software Structure and Design by Robert C.</description></item><item><title>Testing a Spring Boot REST API against a Contract with Spring Cloud Contract</title><link>https://reflectoring.io/consumer-driven-contract-provider-spring-cloud-contract/</link><pubDate>Thu, 16 Aug 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/consumer-driven-contract-provider-spring-cloud-contract/</guid><description>Consumer-driven contract tests are a technique to test integration points between API providers and API consumers without the hassle of end-to-end tests (read it up in a recent blog post).</description></item><item><title>5 Good Reasons to Use a Log Server</title><link>https://reflectoring.io/log-server/</link><pubDate>Mon, 13 Aug 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/log-server/</guid><description>Logging to files and analyzing them by hand is not the way to go anymore. This article explains the reasons why a log server is the way to go for collecting and analyzing log data.</description></item><item><title>How to Configure a Human-Readable Logging Format with Logback and Descriptive Logger</title><link>https://reflectoring.io/logging-format-logback/</link><pubDate>Sat, 11 Aug 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/logging-format-logback/</guid><description>In a previous Tip, I proposed to use a human-readable logging format so that we can quickly scan a log to find the information we need.</description></item><item><title>Testing a Spring Boot REST API against a Consumer-Driven Contract with Pact</title><link>https://reflectoring.io/consumer-driven-contract-provider-pact-spring/</link><pubDate>Sat, 11 Aug 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/consumer-driven-contract-provider-pact-spring/</guid><description>Consumer-driven contract tests are a technique to test integration points between API providers and API consumers without the hassle of end-to-end tests (read it up in a recent blog post).</description></item><item><title>Creating a Consumer-Driven Contract with Feign and Pact</title><link>https://reflectoring.io/consumer-driven-contract-feign-pact/</link><pubDate>Fri, 10 Aug 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/consumer-driven-contract-feign-pact/</guid><description>Consumer-driven contract tests are a technique to test integration points between API providers and API consumers without the hassle of end-to-end tests (read it up in a recent blog post).</description></item><item><title>Tip: Provide Contextual Information in Log Messages</title><link>https://reflectoring.io/logging-context/</link><pubDate>Sun, 05 Aug 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/logging-context/</guid><description>Have you ever had a situation where you stared at en error message in a log and wondered &amp;ldquo;how the hell is this supposed to help me?</description></item><item><title>Tip: Use a Human-Readable Logging Format</title><link>https://reflectoring.io/logging-format/</link><pubDate>Mon, 30 Jul 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/logging-format/</guid><description>Application logs are all about finding the right information in the least amount of time. Automated log servers may help us in finding and filtering log messages.</description></item><item><title>Tip: Use Logging Levels Consistently</title><link>https://reflectoring.io/logging-levels/</link><pubDate>Sat, 28 Jul 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/logging-levels/</guid><description>When searching for a bug, or just trying to get a feel for an application, it helps a lot if we know which information we can expect to find in the logs.</description></item><item><title>Skipping a CI Build for non-code changes</title><link>https://reflectoring.io/skip-ci-build/</link><pubDate>Mon, 11 Jun 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/skip-ci-build/</guid><description>Skipping a CI build is like purposefully not brushing your teeth every morning and evening. You know it should not be skipped and you feel guilty when you do it anyways.</description></item><item><title>Structuring and Testing Modules and Layers with Spring Boot</title><link>https://reflectoring.io/testing-verticals-and-layers-spring-boot/</link><pubDate>Sun, 27 May 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/testing-verticals-and-layers-spring-boot/</guid><description>Well-behaved software consists of highly cohesive modules that are loosely coupled to other modules. Each module takes care from user input in the web layer down to writing into and reading from the database.</description></item><item><title>Microservice Communication Patterns</title><link>https://reflectoring.io/microservice-communication-patterns/</link><pubDate>Mon, 14 May 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/microservice-communication-patterns/</guid><description>A microservice architecture is all about communication. How should services communicate in any given business scenario? Should they call each other synchronously?</description></item><item><title>Modularizing a Spring Boot Application</title><link>https://reflectoring.io/spring-boot-modules/</link><pubDate>Tue, 06 Feb 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-modules/</guid><description>Every software project comes to a point where the code should be broken up into modules. These may be modules within a single code base or modules that each live in their own code base.</description></item><item><title>Publishing Open Source Releases to JCenter and Maven Central</title><link>https://reflectoring.io/bintray-jcenter-maven-central/</link><pubDate>Wed, 24 Jan 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/bintray-jcenter-maven-central/</guid><description>In previous articles, I discussed how to publish snapshots to oss.jfrog.org and how to publish releases to Bintray using Gradle as a build tool.</description></item><item><title>Testing a Spring Boot REST API Consumer against a Contract with Spring Cloud Contract</title><link>https://reflectoring.io/consumer-driven-contract-consumer-spring-cloud-contract/</link><pubDate>Thu, 18 Jan 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/consumer-driven-contract-consumer-spring-cloud-contract/</guid><description>Consumer-driven contract tests are a technique to test integration points between API providers and API consumers without the hassle of end-to-end tests (read it up in a recent blog post).</description></item><item><title>Autostart for your Spring Boot Application</title><link>https://reflectoring.io/autostart-with-winsw/</link><pubDate>Sun, 14 Jan 2018 00:00:00 +0000</pubDate><guid>https://reflectoring.io/autostart-with-winsw/</guid><description>A few months ago I was asked to find a solution for starting and stopping a Spring Boot application under Windows automatically together with the computer this application was running on.</description></item><item><title>A Fully Automated Open Source Release Chain with Gradle and Travis CI</title><link>https://reflectoring.io/fully-automated-open-source-release-chain/</link><pubDate>Fri, 29 Dec 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/fully-automated-open-source-release-chain/</guid><description>&amp;ldquo;Release early, release often&amp;rdquo;. This philosophy should be a goal for every software project. Users can only give quality feedback when they have early access to a software release.</description></item><item><title>Publishing Open Source Snapshots with Gradle</title><link>https://reflectoring.io/publish-snapshots-with-gradle/</link><pubDate>Wed, 20 Dec 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/publish-snapshots-with-gradle/</guid><description>One of the most fulfilling things in developing an open source project is getting feedback from the users of your project.</description></item><item><title>Creating a Consumer-Driven Contract with Angular and Pact</title><link>https://reflectoring.io/consumer-driven-contracts-with-angular-and-pact/</link><pubDate>Sun, 10 Dec 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/consumer-driven-contracts-with-angular-and-pact/</guid><description>Consumer-driven contract tests are a technique to test integration points between API providers and API consumers without the hassle of end-to-end tests (read it up in a recent blog post).</description></item><item><title>Publishing Open Source Releases with Gradle</title><link>https://reflectoring.io/guide-publishing-to-bintray-with-gradle/</link><pubDate>Mon, 04 Dec 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/guide-publishing-to-bintray-with-gradle/</guid><description>When working on an open source Java project, you always come to the point where you want to share your work with the developer community (at least that should be the goal).</description></item><item><title>7 Reasons to Choose Consumer-Driven Contract Tests Over End-to-End Tests</title><link>https://reflectoring.io/7-reasons-for-consumer-driven-contracts/</link><pubDate>Wed, 29 Nov 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/7-reasons-for-consumer-driven-contracts/</guid><description>In a distributed system, testing the successful integration between
distributed services is essential for ensuring that the services won&amp;rsquo;t fail in production just because they&amp;rsquo;re not speaking the same language.</description></item><item><title>Lazy Evaluation of Gradle Properties</title><link>https://reflectoring.io/gradle-lazy-property-evaluation/</link><pubDate>Tue, 14 Nov 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/gradle-lazy-property-evaluation/</guid><description>Writing Gradle build tasks is often easy and straight forward, but as soon as you start to write more generic tasks for multiple modules or projects it can get a little tricky.</description></item><item><title>Assumptions and Conditional Test Execution with JUnit 4 and 5</title><link>https://reflectoring.io/conditional-junit4-junit5-tests/</link><pubDate>Tue, 10 Oct 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/conditional-junit4-junit5-tests/</guid><description>Sometimes, a test should only be run under certain conditions. One such case are integration tests which depend on a certain external system.</description></item><item><title>Robust Java Object Mapping With Minimal Testing Overhead Using reMap</title><link>https://reflectoring.io/autotmatic-refactoring-safe-java-mapping/</link><pubDate>Sun, 01 Oct 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/autotmatic-refactoring-safe-java-mapping/</guid><description>Object mapping is a necessary and often unloved evil in software development projects. To communicate between layers of your application, you have to create and test mappers between a multitude of types, which can be a very cumbersome task, depending on the mapper library that is used.</description></item><item><title>Event Messaging for Microservices with Spring Boot and RabbitMQ</title><link>https://reflectoring.io/event-messaging-with-spring-boot-and-rabbitmq/</link><pubDate>Sat, 16 Sep 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/event-messaging-with-spring-boot-and-rabbitmq/</guid><description>In a microservice environment or any other distributed system you may come upon the requirement to exchange events between services. This article shows how to implement a messaging solution with RabbitMQ.</description></item><item><title>A Guide to Formatting Code Snippets in Javadoc</title><link>https://reflectoring.io/howto-format-code-snippets-in-javadoc/</link><pubDate>Mon, 14 Aug 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/howto-format-code-snippets-in-javadoc/</guid><description>Sometimes you want to add code snippets to our Javadoc comments, especially when developing an API of some kind. But how do you mark the code snippet so that it will be rendered correctly in the final Javadoc HTML, especially when special characters like '&amp;lt;', '&amp;gt;' and '@' are involved?</description></item><item><title>Consumer-Driven Contracts with Pact, Feign and Spring Data REST</title><link>https://reflectoring.io/consumer-driven-contracts-with-pact-feign-spring-data-rest/</link><pubDate>Wed, 09 Aug 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/consumer-driven-contracts-with-pact-feign-spring-data-rest/</guid><description>When thinking about integration testing in a distributed system, you quickly come across the concept of consumer-driven contracts. This blog post gives a short introduction into this concept and a concrete implementation example using the technologies Pact, Spring Boot, Feign and Spring Data REST.</description></item><item><title>Documenting a Spring Data REST API with Springfox and Swagger</title><link>https://reflectoring.io/documenting-spring-data-rest-api-with-springfox/</link><pubDate>Wed, 02 Aug 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/documenting-spring-data-rest-api-with-springfox/</guid><description>With Spring Data REST you can rapidly create a REST API that exposes your Spring Data repositories and thus provides CRUD support and more.</description></item><item><title>Accessing a Spring Data REST API with Feign</title><link>https://reflectoring.io/accessing-spring-data-rest-with-feign/</link><pubDate>Mon, 31 Jul 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/accessing-spring-data-rest-with-feign/</guid><description>Spring Data REST is a framework that automatically exposes a REST API for Spring Data repositories, thus potentially saving a lot of manual programming work.</description></item><item><title>Handling Associations Between Entities with Spring Data REST</title><link>https://reflectoring.io/relations-with-spring-data-rest/</link><pubDate>Sun, 30 Jul 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/relations-with-spring-data-rest/</guid><description>Spring Data Rest allows to rapidly create a REST API to manipulate and query a database by exposing Spring Data repositories via its @RepositoryRestResource annotation.</description></item><item><title>Serializing LocalDate to JSON in Spring Boot</title><link>https://reflectoring.io/configuring-localdate-serialization-spring-boot/</link><pubDate>Tue, 25 Jul 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/configuring-localdate-serialization-spring-boot/</guid><description>Today, I stumbled (once again) over LocalDate in a Spring Boot application. LocalDate came with Java 8 and is part of the new standard API in Java for working with dates.</description></item><item><title>Locking transitive Dependencies with NPM</title><link>https://reflectoring.io/locking-dependencies-with-npm/</link><pubDate>Mon, 24 Jul 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/locking-dependencies-with-npm/</guid><description>As a developer I am lazy. I don&amp;rsquo;t build everything by myself because others have done it already. So, when I come upon a problem someone has already solved and that someone put that solution into some library, I simply pull that library into my own - I declare a dependency to that library.</description></item><item><title>A Checklist for setting up a Java-based Software Architecture</title><link>https://reflectoring.io/checklist-architecture-setup/</link><pubDate>Sat, 27 May 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/checklist-architecture-setup/</guid><description>I recently had the opportunity to propose the architecture for a new large-scale software project. While it&amp;rsquo;s fun being paid for finding the technologies that best fit to the customer&amp;rsquo;s requirements (of which only a fraction is available at the time, of course), it may also be daunting having to come up with a solution that is future-proof and scales with expectations.</description></item><item><title>Tool-based Database Refactoring: Flyway vs. Liquibase</title><link>https://reflectoring.io/database-refactoring-flyway-vs-liquibase/</link><pubDate>Sun, 14 May 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/database-refactoring-flyway-vs-liquibase/</guid><description>In a previous blog post I discussed the term &amp;ldquo;database refactoring&amp;rdquo; and some concepts that allow database refactoring to be supported by tools with the result of having a database schema that is versioned just like your software is.</description></item><item><title>Monitoring the Error Rate of a Spring Boot Web Application</title><link>https://reflectoring.io/monitoring-error-rate-spring-boot/</link><pubDate>Sun, 07 May 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/monitoring-error-rate-spring-boot/</guid><description>In my previous blog posts about creating monitoring metrics with Dropwizard Metrics and exposing them for the Prometheus monitoring application we already have gained a little insight into why monitoring is important and how to implement it.</description></item><item><title>Exposing Metrics of a Spring Boot Application for Prometheus</title><link>https://reflectoring.io/monitoring-spring-boot-with-prometheus/</link><pubDate>Mon, 01 May 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/monitoring-spring-boot-with-prometheus/</guid><description>Monitoring is an important quality requirement for applications that claim to be production-ready. In a previous blog post I discussed how to expose metrics of your Spring Boot application with the help of the Dropwizard Metrics library.</description></item><item><title>Exposing Metrics of a Spring Boot Application using Dropwizard</title><link>https://reflectoring.io/transparency-with-spring-boot/</link><pubDate>Fri, 21 Apr 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/transparency-with-spring-boot/</guid><description>How do we know if an application we just put into production is working as it should? How do we know that the application can cope with the number of users and is not slowing down to a crawl?</description></item><item><title>OpenID Connect</title><link>https://reflectoring.io/openid-connect/</link><pubDate>Wed, 19 Apr 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/openid-connect/</guid><description>You may have already heard about OpenID Connect as the new standard for single sign-on and identity provision on the internet.</description></item><item><title>Digital Signature in Java</title><link>https://reflectoring.io/How%20to%20sign/</link><pubDate>Fri, 14 Apr 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/How%20to%20sign/</guid><description>Often you come across the requirement to validate integrity and authenticity of data that was sent digitally. Digital signatures are the solution to this requirement.</description></item><item><title>Modeling Git Commits with Neo4j</title><link>https://reflectoring.io/git-neo4j/</link><pubDate>Fri, 14 Apr 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/git-neo4j/</guid><description>For the coderadar project, I&amp;rsquo;m currently searching for a way to create a persistent model of a git commit history that contains the relationships between all commits and the files that were touched within these commits.</description></item><item><title>Tool-based Database Refactoring</title><link>https://reflectoring.io/tool-based-database-refactoring/</link><pubDate>Sat, 01 Apr 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/tool-based-database-refactoring/</guid><description>The term &amp;ldquo;refactoring&amp;rdquo; is well defined in software development. It is usually used to describe a restructuring of source code ranging from simply renaming a variable to completely re-thinking whole components or applications.</description></item><item><title>A Random Pitfall</title><link>https://reflectoring.io/how-to-random/</link><pubDate>Thu, 16 Feb 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/how-to-random/</guid><description>From time to time we need a randomly generated Number in Java. In this case we are normally using java.util.Random which provides a stream of pseudo generated Numbers.</description></item><item><title>Loading External Application Properties in the Gradle bootRun Task</title><link>https://reflectoring.io/externalizing-properties-gradle-bootrun/</link><pubDate>Wed, 25 Jan 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/externalizing-properties-gradle-bootrun/</guid><description>The Spring Boot gradle plugin provides the bootRun task that allows a developer to start the application in a &amp;ldquo;developer mode&amp;rdquo; without first building a JAR file and then starting this JAR file.</description></item><item><title>Github's Fork &amp; Pull Workflow for Git Beginners</title><link>https://reflectoring.io/github-fork-and-pull/</link><pubDate>Mon, 02 Jan 2017 00:00:00 +0000</pubDate><guid>https://reflectoring.io/github-fork-and-pull/</guid><description>If you are new to git and/or GitHub, it&amp;rsquo;s easy to get overwhelmed by the different workflow models you can use to contribute code to a repository.</description></item><item><title>Documenting your REST API with Spring Rest Docs</title><link>https://reflectoring.io/spring-restdocs/</link><pubDate>Mon, 19 Dec 2016 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-restdocs/</guid><description>The first impression counts. When you&amp;rsquo;re developing an API of any kind, chances are that the first impression is gained from a look into the API docs.</description></item><item><title>Getting the current Subversion Revision Number in Gradle</title><link>https://reflectoring.io/getting-svn-revision-in-gradle/</link><pubDate>Sat, 26 Nov 2016 00:00:00 +0000</pubDate><guid>https://reflectoring.io/getting-svn-revision-in-gradle/</guid><description>A common use case for build tools like Ant, Maven or Gradle is to retrieve the current revision number of the project sources in the Version Control System (VCS), in many cases Subversion (SVN).</description></item><item><title>'Code First' API Documentation with Springdoc and Spring Boot</title><link>https://reflectoring.io/spring-boot-springdoc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reflectoring.io/spring-boot-springdoc/</guid><description>When following a &amp;ldquo;code first&amp;rdquo; approach in API development, we first start with writing code, and then we generate the API specification from the code, which then becomes the documentation.</description></item><item><title>About Reflectoring</title><link>https://reflectoring.io/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reflectoring.io/about/</guid><description>Hi,
I&amp;rsquo;m Tom, and I run the reflectoring blog.
I&amp;rsquo;m a software developer, consultant, architect, coach &amp;hellip; whatever the role, I&amp;rsquo;m focused on making things simple.</description></item><item><title>Advertise on Reflectoring</title><link>https://reflectoring.io/advertise/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reflectoring.io/advertise/</guid><description>Looking to put your brand or product in front of more than 150,000 Java developers per month?
Read on, this page details the different sponsorship options.</description></item><item><title>Author Payment</title><link>https://reflectoring.io/contribute/author-payment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reflectoring.io/contribute/author-payment/</guid><description>Successful Review All payments are subject to a successful review and the publishing of the article in question. I will not publish low-quality articles.</description></item><item><title>Author Workflow</title><link>https://reflectoring.io/contribute/author-workflow/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reflectoring.io/contribute/author-workflow/</guid><description>This document explains the workflow of writing articles for reflectoring to make our cooperation as productive as possible for both of us.</description></item><item><title>Become an Author</title><link>https://reflectoring.io/contribute/become-an-author/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reflectoring.io/contribute/become-an-author/</guid><description>I&amp;rsquo;m looking for authors to contribute to the reflectoring blog!
Interested to write about Spring and Java, Kotlin, Node.js, or the software craft in general?</description></item><item><title>Book me</title><link>https://reflectoring.io/book-me/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reflectoring.io/book-me/</guid><description>You need an experienced software engineer for a mentoring or pairing session? To bounce off some ideas? To validate an architecture?</description></item><item><title>Get Your Hands Dirty on Clean Architecture (2nd edition)</title><link>https://reflectoring.io/book/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reflectoring.io/book/</guid><description>A good software architecture should keep the cost of development low over the complete lifetime of an application.
Ever wondered about how to actually implement a “Clean Architecture” or a “Hexagonal Architecture”?</description></item><item><title>Marrying Vue.js and Thymeleaf: Embedding Javascript Components in Server-Side Templates</title><link>https://reflectoring.io/reusable-vue-components-in-thymeleaf/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reflectoring.io/reusable-vue-components-in-thymeleaf/</guid><description>In the good old days, we implemented web applications with a server-side web framework. The browser sends a request to the server, the server processes the request and answers with HTML, the browser renders that HTML.</description></item><item><title>Privacy Policy</title><link>https://reflectoring.io/privacy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reflectoring.io/privacy/</guid><description>Last modified: July 14, 2019
Introduction Tom Hombergs (&amp;ldquo;us&amp;rdquo;, &amp;ldquo;we&amp;rdquo;, or &amp;ldquo;our&amp;rdquo;) operates the https://reflectoring.io website (hereinafter referred to as the &amp;ldquo;Service&amp;rdquo;).</description></item><item><title>REST with Hypermedia - Hot or Not?</title><link>https://reflectoring.io/rest-hypermedia/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reflectoring.io/rest-hypermedia/</guid><description>Believing Roy Fielding, who first coined the REST acronym, you may call your API a REST API only if you make use of hypertext.</description></item><item><title>Search Result</title><link>https://reflectoring.io/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reflectoring.io/search/</guid><description/></item><item><title>Simplify!</title><link>https://reflectoring.io/simplify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reflectoring.io/simplify/</guid><description>What You&amp;rsquo;ll Get You’ll get a regular 5-minutes-to-read email with inspiration on how to grow as a software engineer (and as a person) by simplifying your habits and processes.</description></item><item><title>Thanks for signing up!</title><link>https://reflectoring.io/subscribed/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reflectoring.io/subscribed/</guid><description>You have successfully subscribed to the Newsletter.
You will receive an email with your welcome gifts shortly :).
Cheers, Tom</description></item><item><title>Writing Guide</title><link>https://reflectoring.io/contribute/writing-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reflectoring.io/contribute/writing-guide/</guid><description>Reflectoring Mission Statement The reflectoring blog aims to provide software developers with a comprehensive but easy-to-read learning experience that generates “aha” moments when they need to solve a specific problem.</description></item></channel></rss>