Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

12 factor app #122

Open
wants to merge 24 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
2d9fd30
12 factor app initial push
theamith May 11, 2024
53e39e2
Upgrade angular 17.3.6 (#121)
robinsonzimmermann May 10, 2024
0c00a8c
12 factor app initial push
theamith May 11, 2024
f96448d
Upgrade angular 17.3.6 (#121)
robinsonzimmermann May 10, 2024
7d8793e
12 factor app initial push
theamith May 11, 2024
afb4e0e
Merge branch 'main' into amithku/12-factor-app
theamith May 11, 2024
16f2ca1
Merge branch 'main' into amithku/12-factor-app
theamith May 15, 2024
e8037f8
Merge branch 'main' into amithku/12-factor-app
yauheni-bb May 15, 2024
9d005e6
Merge branch 'main' into amithku/12-factor-app
theamith May 15, 2024
e161917
adding more reference links
theamith May 16, 2024
f31cb4b
Merge branch 'main' into amithku/12-factor-app
theamith May 20, 2024
3133f14
add image and refactor content
theamith May 23, 2024
38f3d61
codebase image theme update
theamith May 24, 2024
2b28b3e
update image theme for config and backing services
theamith May 24, 2024
d339a4d
update concurrency theme
theamith May 24, 2024
13c91f5
Merge branch 'main' into amithku/12-factor-app
theamith May 31, 2024
7fa0d12
Merge branch 'main' into amithku/12-factor-app
theamith Jun 1, 2024
08d3aa6
Merge branch 'main' into amithku/12-factor-app
theamith Jun 19, 2024
ad31a43
Merge branch 'main' into amithku/12-factor-app
theamith Jun 28, 2024
9d86b2c
Merge branch 'main' into amithku/12-factor-app
theamith Jun 29, 2024
8a69ab3
Merge branch 'main' into amithku/12-factor-app
theamith Jul 21, 2024
4de0f08
Merge branch 'main' into amithku/12-factor-app
theamith Aug 23, 2024
fb6c1be
Merge branch 'main' into amithku/12-factor-app
theamith Oct 23, 2024
f1054ff
Merge branch 'main' into amithku/12-factor-app
theamith Jan 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions content/authors/authors.json
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,10 @@
"avatar": "omar.jpg",
"role": "(Former) Frontend Engineer - Customer Success"
},
"Amith Kumar Madhusoodhanan": {
"avatar": "amithku.jpg",
"role": "Principal Backend Engineer - Customer Success"
},
"Pablo Villoslada Puigcerber": {
"avatar": "pablo.png",
"role": "Lead Principal Frontend Engineer - Customer Success"
Expand Down
Binary file added content/authors/avatars/amithku.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
# Building Reliable and Scalable Applications: A Guide to 12-Factor Apps with Java and Spring Boot

Check warning on line 1 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L1

[Google.Headings] 'Building Reliable and Scalable Applications: A Guide to 12-Factor Apps with Java and Spring Boot' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] 'Building Reliable and Scalable Applications: A Guide to 12-Factor Apps with Java and Spring Boot' should use sentence-style capitalization.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 1, "column": 3}}}, "severity": "WARNING"}

Check warning on line 1 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L1

[Google.Colons] ': A' should be in lowercase.
Raw output
{"message": "[Google.Colons] ': A' should be in lowercase.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 1, "column": 46}}}, "severity": "WARNING"}

Modern software demands robust, scalable apps. Enter 12-Factor Apps, your guide to building cloud-native champions.
![](assets/12-factor-app.png)

Authors: Amith Kumar Madhusoodhanan

Check warning on line 6 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L6

[Google.Colons] ': A' should be in lowercase.
Raw output
{"message": "[Google.Colons] ': A' should be in lowercase.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 6, "column": 8}}}, "severity": "WARNING"}
Date: unpublished
Category: backend

tags: 12-factor app, Java, Spring Boot, Cloud-native applications, DevOps, CI/CD, Microservices architecture, Docker, Containerization, Maven, Gradle, Configuration management, Dependency management, Backing services, Externalized configuration, Concurrency management, Logging, Monitoring, Scalability, Resilience

Check warning on line 10 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L10

[Google.WordList] Use 'Google Cloud Platform' or 'GCP' instead of 'Cloud'.
Raw output
{"message": "[Google.WordList] Use 'Google Cloud Platform' or 'GCP' instead of 'Cloud'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 10, "column": 41}}}, "severity": "WARNING"}

---
## What are 12-Factor Apps?

Check warning on line 13 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L13

[Google.Headings] 'What are 12-Factor Apps?' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] 'What are 12-Factor Apps?' should use sentence-style capitalization.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 13, "column": 4}}}, "severity": "WARNING"}

tarun-bb marked this conversation as resolved.
Show resolved Hide resolved
The 12-Factor App methodology, originally introduced by Heroku, outlines a set of guidelines for building applications that are:

Check warning on line 15 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L15

[write-good.TooWordy] 'methodology' is too wordy.
Raw output
{"message": "[write-good.TooWordy] 'methodology' is too wordy.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 15, "column": 19}}}, "severity": "WARNING"}

- **Portable**: Easy to deploy across different environments.

Check warning on line 17 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L17

[Google.Colons] ': E' should be in lowercase.
Raw output
{"message": "[Google.Colons] ': E' should be in lowercase.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 17, "column": 17}}}, "severity": "WARNING"}
- **Scalable**: Can readily scale up or down based on demand.

Check warning on line 18 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L18

[Google.Colons] ': C' should be in lowercase.
Raw output
{"message": "[Google.Colons] ': C' should be in lowercase.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 18, "column": 17}}}, "severity": "WARNING"}
- **Maintainable**: Simple to understand and modify.

Check warning on line 19 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L19

[Google.Colons] ': S' should be in lowercase.
Raw output
{"message": "[Google.Colons] ': S' should be in lowercase.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 19, "column": 21}}}, "severity": "WARNING"}

Check warning on line 19 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L19

[write-good.TooWordy] 'modify' is too wordy.
Raw output
{"message": "[write-good.TooWordy] 'modify' is too wordy.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 19, "column": 48}}}, "severity": "WARNING"}
- **Disposable**: Can be easily restarted or replaced without impacting functionality.

Check warning on line 20 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L20

[Google.Colons] ': C' should be in lowercase.
Raw output
{"message": "[Google.Colons] ': C' should be in lowercase.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 20, "column": 19}}}, "severity": "WARNING"}

Check warning on line 20 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L20

[write-good.Weasel] 'easily' is a weasel word!
Raw output
{"message": "[write-good.Weasel] 'easily' is a weasel word!", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 20, "column": 28}}}, "severity": "WARNING"}

Check warning on line 20 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L20

[Google.WordList] Use 'capability' or 'feature' instead of 'functionality'.
Raw output
{"message": "[Google.WordList] Use 'capability' or 'feature' instead of 'functionality'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 20, "column": 75}}}, "severity": "WARNING"}

tarun-bb marked this conversation as resolved.
Show resolved Hide resolved
Let's explore how to implement these principles using Java and Spring Boot:

Check warning on line 22 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L22

[Google.We] Try to avoid using first-person plural like 'Let's'.
Raw output
{"message": "[Google.We] Try to avoid using first-person plural like 'Let's'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 22, "column": 1}}}, "severity": "WARNING"}

Check warning on line 22 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L22

[write-good.TooWordy] 'implement' is too wordy.
Raw output
{"message": "[write-good.TooWordy] 'implement' is too wordy.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 22, "column": 22}}}, "severity": "WARNING"}

---

### 1. Codebase

Check warning on line 26 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L26

[Google.HeadingPunctuation] Don't put a period at the end of a heading.
Raw output
{"message": "[Google.HeadingPunctuation] Don't put a period at the end of a heading.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 26, "column": 5}}}, "severity": "WARNING"}

Maintain a single codebase for your application, typically stored in a centralized version control system like Subversion or decentralized version control system like Git. This ensures consistent code across development, staging, and production environments.

Check warning on line 28 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L28

[Google.WordList] Use 'app' instead of 'application'.
Raw output
{"message": "[Google.WordList] Use 'app' instead of 'application'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 28, "column": 37}}}, "severity": "WARNING"}
![](assets/image.png)

Multiple apps should not share same codebase, rather shared code as libraries which can be added as [dependencies](#2-dependencies). In reality there can be multple deployments of an app from the same codebase, although code versions may differ in each deployment.

Check warning on line 31 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L31

[write-good.TooWordy] 'Multiple' is too wordy.
Raw output
{"message": "[write-good.TooWordy] 'Multiple' is too wordy.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 31, "column": 1}}}, "severity": "WARNING"}

Check warning on line 31 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L31

[write-good.Passive] 'be added' may be passive voice. Use active voice if you can.
Raw output
{"message": "[write-good.Passive] 'be added' may be passive voice. Use active voice if you can.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 31, "column": 89}}}, "severity": "WARNING"}
![](assets/image-1.png)

### 2. Dependencies

Check warning on line 34 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L34

[Google.HeadingPunctuation] Don't put a period at the end of a heading.
Raw output
{"message": "[Google.HeadingPunctuation] Don't put a period at the end of a heading.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 34, "column": 5}}}, "severity": "WARNING"}

Declare all dependencies explicitly and isolate dependencies in a manifest file like a Maven POM (pom.xml) or Gradle build script. This makes sure that the dependecies are pulled during build phase and the does not assume the dependencies to be present on the build system/runtime. This helps to provide consistency between development and production environments, simplifies the setup for developers new to the application, and supports portability between cloud platforms.

Check warning on line 36 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L36

[write-good.Passive] 'are pulled' may be passive voice. Use active voice if you can.
Raw output
{"message": "[write-good.Passive] 'are pulled' may be passive voice. Use active voice if you can.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 36, "column": 169}}}, "severity": "WARNING"}

Check warning on line 36 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L36

[Google.WordList] Use 'app' instead of 'application'.
Raw output
{"message": "[Google.WordList] Use 'app' instead of 'application'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 36, "column": 413}}}, "severity": "WARNING"}

```xml
<project>
<groupId>com.example</groupId>
<artifactId>my-spring-boot-app</artifactId>
<version>1.0.0</version>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Add other dependencies here -->
</dependencies>
</project>
```

### 3. Configuration

Check warning on line 54 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L54

[Google.HeadingPunctuation] Don't put a period at the end of a heading.
Raw output
{"message": "[Google.HeadingPunctuation] Don't put a period at the end of a heading.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 54, "column": 5}}}, "severity": "WARNING"}

Store configuration details (database connection strings, API keys, and other [backing services](#4-backing-services)) outside your codebase as it is likely to vary between deployments(dev, stage, prod). Use environment variables to load configuration specific to each environment. Spring Boot allows for externalized configuration sources like property files and environment variables. Here's an example of configuring Backbase's user-manager service for [local development using docker-compose](https://github.com/Backbase/local-backend-setup/blob/main/development/docker-compose/docker-compose.yaml):

Check warning on line 56 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L56

[write-good.TooWordy] 'it is' is too wordy.
Raw output
{"message": "[write-good.TooWordy] 'it is' is too wordy.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 56, "column": 145}}}, "severity": "WARNING"}

Check warning on line 56 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L56

[write-good.Weasel] 'likely' is a weasel word!
Raw output
{"message": "[write-good.Weasel] 'likely' is a weasel word!", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 56, "column": 151}}}, "severity": "WARNING"}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

as discussed offline, lets have dos and don't for each factor for consistency

```yaml
user-manager:
image: repo.backbase.com/backbase-docker-releases/user-manager:${BB_VERSION}
ports:
- "8060:8080"
environment:
<<: [*common-variables, *message-broker-variables, *database-variables]
spring.datasource.url: jdbc:mysql://mysql:3306/user-manager?useSSL=false&allowPublicKeyRetrieval=true&cacheServerConfiguration=true&createDatabaseIfNotExist=true
backbase.users.identity-endpoints-enabled: true
backbase.users.identity-integration-enabled: true
backbase.users.sync-primary-to-identity-enabled: true
spring.cloud.discovery.client.simple.instances.user-integration-outbound-service[0].uri: http://wiremock:8080
volumes:
- ./exe/HealthCheck.jar:/tmp/HealthCheck.jar
healthcheck:
<<: *healthcheck-defaults
test: [ "CMD", "java", "-jar", "-Xms5M", "-Xmx10M", "/tmp/HealthCheck.jar", "http://registry:8080/eureka/apps/user-manager", "<status>UP</status>" ]
depends_on:
mysql:
condition: service_healthy
links:
- activemq
- registry
```


### 4. Backing Services

Check warning on line 83 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L83

[Google.HeadingPunctuation] Don't put a period at the end of a heading.
Raw output
{"message": "[Google.HeadingPunctuation] Don't put a period at the end of a heading.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 83, "column": 5}}}, "severity": "WARNING"}

Check warning on line 83 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L83

[Google.Headings] '4. Backing Services' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] '4. Backing Services' should use sentence-style capitalization.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 83, "column": 5}}}, "severity": "WARNING"}

Treat backing services (databases and other external services) as attached resources which can be accessed via a URL or credentials stored in the [config](#3-configuration). A deployment of the twelve-factor app should be able to swap out a local MySQL database with one managed by a third party (such as Azure SQL Database) without any changes to the app’s code. In Backbase we have helm charts which contains backing services configuations for all environments. This allows to deploy the application without making code change and re-packaging.

Check warning on line 85 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L85

[write-good.Passive] 'be accessed' may be passive voice. Use active voice if you can.
Raw output
{"message": "[write-good.Passive] 'be accessed' may be passive voice. Use active voice if you can.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 85, "column": 96}}}, "severity": "WARNING"}

Check warning on line 85 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L85

[Google.We] Try to avoid using first-person plural like 'we'.
Raw output
{"message": "[Google.We] Try to avoid using first-person plural like 'we'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 85, "column": 377}}}, "severity": "WARNING"}

Check warning on line 85 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L85

[Google.WordList] Use 'app' instead of 'application'.
Raw output
{"message": "[Google.WordList] Use 'app' instead of 'application'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 85, "column": 491}}}, "severity": "WARNING"}

![](assets/image-2.png)

### 5. Build, Release, Run

Check warning on line 89 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L89

[Google.HeadingPunctuation] Don't put a period at the end of a heading.
Raw output
{"message": "[Google.HeadingPunctuation] Don't put a period at the end of a heading.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 89, "column": 5}}}, "severity": "WARNING"}

Check warning on line 89 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L89

[Google.Headings] '5. Build, Release, Run' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] '5. Build, Release, Run' should use sentence-style capitalization.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 89, "column": 5}}}, "severity": "WARNING"}

Separate the build, release, and run stages.
- **build**: Build automation tools like maven can pull the [dependencies](#2-dependencies) and package into a docker image which can be pushed to a docker repository.

Check warning on line 92 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L92

[Google.Colons] ': B' should be in lowercase.
Raw output
{"message": "[Google.Colons] ': B' should be in lowercase.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 92, "column": 12}}}, "severity": "WARNING"}

Check warning on line 92 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L92

[write-good.Passive] 'be pushed' may be passive voice. Use active voice if you can.
Raw output
{"message": "[write-good.Passive] 'be pushed' may be passive voice. Use active voice if you can.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 92, "column": 135}}}, "severity": "WARNING"}
- **release**: Combining the docker image generated from build process with the environment specific [configuration](#3-configuration) will produce a release and the release should be labelled with unique ID.

Check warning on line 93 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L93

[Google.Colons] ': C' should be in lowercase.
Raw output
{"message": "[Google.Colons] ': C' should be in lowercase.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 93, "column": 14}}}, "severity": "WARNING"}

Check warning on line 93 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L93

[Google.Will] Avoid using 'will'.
Raw output
{"message": "[Google.Will] Avoid using 'will'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 93, "column": 136}}}, "severity": "WARNING"}

Check warning on line 93 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L93

[write-good.Passive] 'be labelled' may be passive voice. Use active voice if you can.
Raw output
{"message": "[write-good.Passive] 'be labelled' may be passive voice. Use active voice if you can.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 93, "column": 182}}}, "severity": "WARNING"}
- **run**: The deployed app runs in an execution environment, by launching app's [process](#6-processes). A continous deployment tool like Argo CD, usually uses tooling like containers and processes to launch the application. Once that operation is running, the cloud runtime is responsible for its maintenance, health, and dynamic scaling.

Check warning on line 94 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L94

[Google.Colons] ': T' should be in lowercase.
Raw output
{"message": "[Google.Colons] ': T' should be in lowercase.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 94, "column": 10}}}, "severity": "WARNING"}

Check warning on line 94 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L94

[write-good.Weasel] 'usually' is a weasel word!
Raw output
{"message": "[write-good.Weasel] 'usually' is a weasel word!", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 94, "column": 149}}}, "severity": "WARNING"}

Check warning on line 94 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L94

[Google.WordList] Use 'app' instead of 'application'.
Raw output
{"message": "[Google.WordList] Use 'app' instead of 'application'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 94, "column": 214}}}, "severity": "WARNING"}

Check warning on line 94 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L94

[write-good.TooWordy] 'is responsible for' is too wordy.
Raw output
{"message": "[write-good.TooWordy] 'is responsible for' is too wordy.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 94, "column": 277}}}, "severity": "WARNING"}

![](assets/image-3.png)

### 6. Processes

Check warning on line 98 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L98

[Google.HeadingPunctuation] Don't put a period at the end of a heading.
Raw output
{"message": "[Google.HeadingPunctuation] Don't put a period at the end of a heading.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 98, "column": 5}}}, "severity": "WARNING"}

Treat applications as a stateless processes and [share-nothing](http://en.wikipedia.org/wiki/Shared_nothing_architecture). Any data that needs to persist must be stored in a stateful [backing service](#4-backing-services), typically a database.

Check warning on line 100 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L100

[write-good.Passive] 'be stored' may be passive voice. Use active voice if you can.
Raw output
{"message": "[write-good.Passive] 'be stored' may be passive voice. Use active voice if you can.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 100, "column": 160}}}, "severity": "WARNING"}
Applications build using REST as transport protocol using JAX-RS RESTful architecture are stateless. REST based microservices can scale up and down without losing any information. While designing REST applications "sticky sessions" (caching user session data in app memory) should not be used and it is a violation of twelve-factor. Session state data is a good candidate for a datastore that offers time-expiration, such as Memcached or Redis.

Check warning on line 101 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L101

[write-good.Passive] 'be used' may be passive voice. Use active voice if you can.
Raw output
{"message": "[write-good.Passive] 'be used' may be passive voice. Use active voice if you can.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 101, "column": 286}}}, "severity": "WARNING"}

Check warning on line 101 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L101

[write-good.TooWordy] 'it is' is too wordy.
Raw output
{"message": "[write-good.TooWordy] 'it is' is too wordy.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 101, "column": 298}}}, "severity": "WARNING"}

Check warning on line 101 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L101

[write-good.TooWordy] 'expiration' is too wordy.
Raw output
{"message": "[write-good.TooWordy] 'expiration' is too wordy.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 101, "column": 406}}}, "severity": "WARNING"}

### 7. Port Binding

Check warning on line 103 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L103

[Google.HeadingPunctuation] Don't put a period at the end of a heading.
Raw output
{"message": "[Google.HeadingPunctuation] Don't put a period at the end of a heading.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 103, "column": 5}}}, "severity": "WARNING"}

Check warning on line 103 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L103

[Google.Headings] '7. Port Binding' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] '7. Port Binding' should use sentence-style capitalization.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 103, "column": 5}}}, "severity": "WARNING"}
Bind applications to a port using environment variables. Spring Boot applications typically listen on a port defined in the application properties or environment variables.

Check warning on line 104 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L104

[Google.WordList] Use 'app' instead of 'application'.
Raw output
{"message": "[Google.WordList] Use 'app' instead of 'application'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 104, "column": 125}}}, "severity": "WARNING"}

Spring Boot allows configuring the port dynamically using environment variables. Below is an example configuration in `application.properties`:

```properties
# Server port
server.port=${PORT:8080}
```

### 8. Concurrency

Check warning on line 113 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L113

[Google.HeadingPunctuation] Don't put a period at the end of a heading.
Raw output
{"message": "[Google.HeadingPunctuation] Don't put a period at the end of a heading.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 113, "column": 5}}}, "severity": "WARNING"}

Leverage process-based concurrency for scaling. Spring Boot applications can be easily deployed across multiple instances to handle increased traffic.

Check warning on line 115 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L115

[write-good.Weasel] 'easily' is a weasel word!
Raw output
{"message": "[write-good.Weasel] 'easily' is a weasel word!", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 115, "column": 81}}}, "severity": "WARNING"}

Check warning on line 115 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L115

[write-good.TooWordy] 'multiple' is too wordy.
Raw output
{"message": "[write-good.TooWordy] 'multiple' is too wordy.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 115, "column": 104}}}, "severity": "WARNING"}

![](assets/image-4.png)


### 9. Disposability

Check warning on line 120 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L120

[Google.HeadingPunctuation] Don't put a period at the end of a heading.
Raw output
{"message": "[Google.HeadingPunctuation] Don't put a period at the end of a heading.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 120, "column": 5}}}, "severity": "WARNING"}

Design applications to be fast to start and stop. Spring Boot applications typically have quick startup times, making them suitable for containerization.

Spring Boot applications can gracefully handle shutdown signals. You can perform cleanup tasks using `@PreDestroy` annotation:

Check warning on line 124 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L124

[write-good.Weasel] 'gracefully' is a weasel word!
Raw output
{"message": "[write-good.Weasel] 'gracefully' is a weasel word!", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 124, "column": 30}}}, "severity": "WARNING"}

```java
import javax.annotation.PreDestroy;
import org.springframework.stereotype.Component;

@Component
public class MyComponent {

@PreDestroy
public void cleanup() {
// Cleanup tasks
}
}
```

### 10. Dev/Prod Parity

Check warning on line 140 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L140

[Google.Headings] '10. Dev/Prod Parity' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] '10. Dev/Prod Parity' should use sentence-style capitalization.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 140, "column": 5}}}, "severity": "WARNING"}

Check warning on line 140 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L140

[Google.HeadingPunctuation] Don't put a period at the end of a heading.
Raw output
{"message": "[Google.HeadingPunctuation] Don't put a period at the end of a heading.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 140, "column": 6}}}, "severity": "WARNING"}
theamith marked this conversation as resolved.
Show resolved Hide resolved

Keep development, staging, and production environments as similar as possible to ensure that all potential bugs/failures can be identified in development and testing instead of when the application is put into production. By using environment variables and externalized configuration, you can achieve parity between environments.

Check warning on line 142 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L142

[write-good.Passive] 'be identified' may be passive voice. Use active voice if you can.
Raw output
{"message": "[write-good.Passive] 'be identified' may be passive voice. Use active voice if you can.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 142, "column": 126}}}, "severity": "WARNING"}

Check warning on line 142 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L142

[Google.WordList] Use 'app' instead of 'application'.
Raw output
{"message": "[Google.WordList] Use 'app' instead of 'application'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 142, "column": 187}}}, "severity": "WARNING"}

Check warning on line 142 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L142

[write-good.Passive] 'is put' may be passive voice. Use active voice if you can.
Raw output
{"message": "[write-good.Passive] 'is put' may be passive voice. Use active voice if you can.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 142, "column": 199}}}, "severity": "WARNING"}

Docker Containers enable the creation and use of the same image in development, staging, and production. It also helps to ensure that the same backing services are used in every environment. Utilizing this concept of containerization, testing tools like MicroShed Testing enable us to ensure that the testing environment is as close to production as possible, too.

Check warning on line 144 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L144

[write-good.Passive] 'are used' may be passive voice. Use active voice if you can.
Raw output
{"message": "[write-good.Passive] 'are used' may be passive voice. Use active voice if you can.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 144, "column": 161}}}, "severity": "WARNING"}

Check warning on line 144 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L144

[Google.We] Try to avoid using first-person plural like 'us'.
Raw output
{"message": "[Google.We] Try to avoid using first-person plural like 'us'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 144, "column": 280}}}, "severity": "WARNING"}

### 11. Logs

Check warning on line 146 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L146

[Google.HeadingPunctuation] Don't put a period at the end of a heading.
Raw output
{"message": "[Google.HeadingPunctuation] Don't put a period at the end of a heading.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 146, "column": 6}}}, "severity": "WARNING"}
yauheni-bb marked this conversation as resolved.
Show resolved Hide resolved

Treat logs as event streams. Cloud-native applications can elastically scale from 1 to over 100 instances, which makes it difficult to track those instances and organize all of the logs. Spring Boot integrates seamlessly with logging frameworks like Logback, allowing you to centralize log collection and analysis using tools like (e.g., ELK stack, Splunk, Sumologic, etc.).

Check warning on line 148 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L148

[Google.WordList] Use 'Google Cloud Platform' or 'GCP' instead of 'Cloud'.
Raw output
{"message": "[Google.WordList] Use 'Google Cloud Platform' or 'GCP' instead of 'Cloud'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 148, "column": 30}}}, "severity": "WARNING"}

Check warning on line 148 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L148

[write-good.TooWordy] 'all of' is too wordy.
Raw output
{"message": "[write-good.TooWordy] 'all of' is too wordy.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 148, "column": 171}}}, "severity": "WARNING"}

Check failure on line 148 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L148

[Google.Latin] Use 'for example' instead of 'e.g.,'.
Raw output
{"message": "[Google.Latin] Use 'for example' instead of 'e.g.,'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 148, "column": 333}}}, "severity": "ERROR"}

[Disposing](#9-disposability) an instance should not cause logs to vanish. Spring Boot uses SLF4J and Logback by default and helps to configure stdout and stderr logs. You can configure logging levels and appenders in `logback-spring.xml`:

```xml
<configuration>
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
```

### 12. Admin Processes

Check warning on line 160 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L160

[Google.Headings] '12. Admin Processes' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] '12. Admin Processes' should use sentence-style capitalization.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 160, "column": 5}}}, "severity": "WARNING"}

Check warning on line 160 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L160

[Google.HeadingPunctuation] Don't put a period at the end of a heading.
Raw output
{"message": "[Google.HeadingPunctuation] Don't put a period at the end of a heading.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 160, "column": 6}}}, "severity": "WARNING"}

Run administrative tasks as one-off processes and they can be run as Kubernetes tasks. This factor discourages putting one-off admin or management tasks like migrating databases and running one-time scripts to do clean-up inside your microservices instead microservice should focus on business logic.

Check warning on line 162 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L162

[write-good.Passive] 'be run' may be passive voice. Use active voice if you can.
Raw output
{"message": "[write-good.Passive] 'be run' may be passive voice. Use active voice if you can.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 162, "column": 60}}}, "severity": "WARNING"}

Check warning on line 162 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L162

[Google.WordList] Use 'administrator' instead of 'admin'.
Raw output
{"message": "[Google.WordList] Use 'administrator' instead of 'admin'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 162, "column": 128}}}, "severity": "WARNING"}

While running admin process make sure to run in an identical environment as the regular app. They should use the same [codebase](#1-codebase) and [config](#3-configuration) as the app to avoid synchronization issues.

Check warning on line 164 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L164

[Google.WordList] Use 'administrator' instead of 'admin'.
Raw output
{"message": "[Google.WordList] Use 'administrator' instead of 'admin'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 164, "column": 15}}}, "severity": "WARNING"}

Spring Boot applications can be extended with custom admin commands for specific tasks. Here's an example of a scheduled task in Spring Boot:

Check warning on line 166 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L166

[write-good.Passive] 'be extended' may be passive voice. Use active voice if you can.
Raw output
{"message": "[write-good.Passive] 'be extended' may be passive voice. Use active voice if you can.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 166, "column": 30}}}, "severity": "WARNING"}

Check warning on line 166 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L166

[Google.WordList] Use 'administrator' instead of 'admin'.
Raw output
{"message": "[Google.WordList] Use 'administrator' instead of 'admin'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 166, "column": 54}}}, "severity": "WARNING"}

```java
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ScheduledTasks {

@Scheduled(fixedRate = 10000)
public void performDatabaseCleanup() {
// Database cleanup task
}
}
```

---

## Benefits of 12-Factor Apps:

Check warning on line 184 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L184

[Google.Headings] 'Benefits of 12-Factor Apps:' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] 'Benefits of 12-Factor Apps:' should use sentence-style capitalization.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 184, "column": 4}}}, "severity": "WARNING"}
tarun-bb marked this conversation as resolved.
Show resolved Hide resolved

- **Increased Developer Productivity**: Consistent environments and clear separation of concerns make development and maintenance easier.

Check warning on line 186 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L186

[Google.Colons] ': C' should be in lowercase.
Raw output
{"message": "[Google.Colons] ': C' should be in lowercase.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 186, "column": 41}}}, "severity": "WARNING"}
- **Improved Scalability**: Stateless processes allow for easy scaling based on demand.

Check warning on line 187 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L187

[Google.Colons] ': S' should be in lowercase.
Raw output
{"message": "[Google.Colons] ': S' should be in lowercase.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 187, "column": 29}}}, "severity": "WARNING"}
- **Enhanced Portabilit**y: Applications can be deployed across different platforms with minimal changes.

Check warning on line 188 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L188

[Google.Colons] ': A' should be in lowercase.
Raw output
{"message": "[Google.Colons] ': A' should be in lowercase.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 188, "column": 29}}}, "severity": "WARNING"}

Check warning on line 188 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L188

[write-good.Passive] 'be deployed' may be passive voice. Use active voice if you can.
Raw output
{"message": "[write-good.Passive] 'be deployed' may be passive voice. Use active voice if you can.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 188, "column": 48}}}, "severity": "WARNING"}
- **Simplified Maintainability**: Clear separation of code, configuration, and dependencies simplifies application management.

Check warning on line 189 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L189

[Google.Colons] ': C' should be in lowercase.
Raw output
{"message": "[Google.Colons] ': C' should be in lowercase.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 189, "column": 35}}}, "severity": "WARNING"}

Check warning on line 189 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L189

[Google.WordList] Use 'app' instead of 'application'.
Raw output
{"message": "[Google.WordList] Use 'app' instead of 'application'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 189, "column": 106}}}, "severity": "WARNING"}

## Code Examples

Check warning on line 191 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L191

[Google.Headings] 'Code Examples' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] 'Code Examples' should use sentence-style capitalization.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 191, "column": 4}}}, "severity": "WARNING"}

tarun-bb marked this conversation as resolved.
Show resolved Hide resolved
Here's a simple Spring Boot application demonstrating some 12-Factor principles:

Check warning on line 193 in content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md

View workflow job for this annotation

GitHub Actions / vale

[vale] content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md#L193

[Google.WordList] Use 'app' instead of 'application'.
Raw output
{"message": "[Google.WordList] Use 'app' instead of 'application'.", "location": {"path": "content/posts/unpublished/building-reliable-and-scalable-applications-a-guide-to-12-factor-apps-with-java-and-spring-boot/post.md", "range": {"start": {"line": 193, "column": 29}}}, "severity": "WARNING"}

- [Backbase golden sample services](https://github.com/Backbase/golden-sample-services)

## References

- [12factor.net](https://12factor.net/)
- [IBM Developer](https://developer.ibm.com/articles/creating-a-12-factor-application-with-open-liberty/)
- [Redhat](https://www.redhat.com/architect/12-factor-app-containers)
- [Google cloud](https://cloud.google.com/architecture/twelve-factor-app-development-on-gcp)
Loading