Download as pdf or txt
Download as pdf or txt
You are on page 1of 15

Open in app Sign up Sign in

Read data from YAML file Spring boot


application
Jhamukul · Follow
3 min read · Feb 19, 2022

Listen Share

Topics to be covered:

1. Why YAML is more popular than .properties


2. Learn how to read YAML file in the spring boot application
3. YAML best practices for spring boot application

Let’s take a simple MySQL spring boot connection as an example.


To connect MySQL with the spring boot application, we need to add these configs
to the application.properties file.

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=user
spring.datasource.password=user

If you see the above configuration in this “spring.datasource” common for all.
This is a sample example, Thinks about a large project.
Below config is an example of YAML. Look, It is more formatted and structured
with no duplicates(“spring.datasource”)

spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: user
password: user

if you don’t know about YAML and want to learn


https://yaml.org/spec/1.2.2/#chapter-1-introduction-to-yaml

How to read YAML file in spring boot application

Take an example: This is more structured YAML as application.yml.


All application constants/properties wrapped inside myservice-config:

You can do with your spring boot application as well. Trust me it is more readable
and easy to use.

myservice-config:
#My application constants/config properties starts from here
external-service-config:
payment_url: "http://localhost:8081/payment
auth_url: "http://localhost:8083/auth
login_url: "http://localhost:9999/login"
swagger-config:
title: "Dummy Service APIs"
description: "Rest API's for dummy Service"
version: "version-1"
redis-config:
host: localhost
port: 6379
rollbar-config:
access_token: "3egfhcd2c0978888hhh9b0bcdc445"
environment: "local"
aws-config:
access_key: MKIKAINKTWT123345898
secret_key: LMdhahdj777/jjijkajdk7
bucket_region: ap-south-1
cloud_folder: uploads/local
#ends here
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: user
password: user

#Swagger-ui disable and enable by making enabled true or false


springdoc:
api-docs:
enabled: true

How to read these config property, like aws access key, rollbar access key etc

Step 1: Create a class eg like AppProperties


package com.boot.demo.configs.properties;

import lombok.Getter;
import lombok.Setter;
import
org.springframework.boot.context.properties.ConfigurationPropertie
s;

@ConfigurationProperties(prefix = "myservice")
@Getter
@Setter
public class AppProperties {

private final ExternalServiceConfig centralServiceConfig = new


ExternalServiceConfig();
private final SwaggerConfig swaggerConfig = new
SwaggerConfig();
private final RedisConfig redisConfig = new RedisConfig();
private final RollbarConfig rollbarConfig = new
RollbarConfig();
private final AwsConfig awsConfig = new AwsConfig();

@Getter
@Setter
public static class ExternalServiceConfig {
private String paymentUrl;
private String authUrl;
private String loginUrl;
}

@Getter
@Setter
public static class SwaggerConfig {
private String title;
private String description;
private String version;
}

@Getter
@Setter
public static class RedisConfig {
private String host;
private Integer port;
}

@Getter
@Setter
public static class RollbarConfig {
private String accessToken;
private String environment;
}
@Getter
@Setter
public static class AwsConfig {
private String accessKey;
private String secretKey;
private String bucketRegion;
private String cloudFolder;
}
}

Step 2: Add @EnableConfigurationProperties(“your class Name”) in main spring


boot class

@SpringBootApplication
@EnableConfigurationProperties(AppProperties.class)
public class YAMLTestDemoApplication {
public static void main(String[] args) {
SpringApplication.run(YAMLTestDemoApplication.class, args);
}
}

Step 3: If your application doesn’t have annotationProcessor then add


annotationProcessor dependency in pom.xml or build.gradle.
Dependency of annotationProcessor for gradle spring boot application.

annotationProcessor "org.springframework.boot:spring-boot-
configuration-processor"

Now AppProperties contains all myservice-config details and it’s ready to use.
How do we use
Sample example how you can use AppProperties/YAML data in configuration.

@Configuration
@AllArgsConstructor
public class AwsS3Client {
private final AppProperties appProperties;
@Bean
public AmazonS3 getClient() {
final BasicAWSCredentials basicCredentials = new
BasicAWSCredentials(appProperties.getAwsConfig().getAccessKey()
, appProperties.getAwsConfig().getSecretKey());

return AmazonS3ClientBuilder.standard()
.withCredentials(new
AWSStaticCredentialsProvider(basicCredentials))
.withRegion(appProperties.getAwsConfig().getBucketRegion())
.build();
}
}
Note: How you can enable or disable swagger-ui in different profiles.
UseCase: I don’t need swagger-ui in production env so no one can use it.
Add this configuration to your production’s .yml file

springdoc:
api-docs:
enabled: false
Spring Boot Yml Yaml S3 Bucket Swagger Ui

Follow

Written by Jhamukul
77 Followers

More from Jhamukul

Jhamukul

Spring boot: Setting a unique id per request


Spring boot: Setting a unique id per request
Sometimes it is very hard to track all logs or the next or previous ones that are related to a
specific log in distributed microservice.

3 min read · Sep 6, 2022

144 4

Jhamukul

How to caught Async Exception Spring boot application


How do we track and caught async exception that occurs during the async method flow
across the application?

2 min read · Feb 19, 2022

44
Jhamukul

Spring boot: Scaling with Redis Pub/Sub


There are many famous messaging queues. like Kafka, RabbitMQ etc

3 min read · Dec 16, 2022

4 1

Jhamukul

Spring boot: Scale file storage with AWS S3


How do we store files?

6 min read · Feb 11


17

See all from Jhamukul

Recommended from Medium

Shashi Kumar

Using a CrudRepository to read records in Spring Batch:


RepositoryItemReader
Using JPA’s Repository for reading items using ItemReader in Spring Batch.

5 min read · Aug 9

1
Alexander Obregon

Using Spring’s @Retryable Annotation for Automatic Retries


Introduction

11 min read · Sep 17

41 1

Lists

General Coding Knowledge


20 stories · 707 saves
Dennis in Level Up Coding

How to deal with nested entities in Spring Controller


Creating a webservice with Spring is almost trivial, you usually won’t go wrong by following
the tutorials. However, things can get tricky…

4 min read · Jun 28

52

Mert Kağan Aktaş

Spring Data REST: Say Goodbye to Controller and Service.


In the rapidly evolving landscape of software development, managing database access and
operations has seen significant advancements. One…

6 min read · Oct 31


1.4K 34

Zeeshan Adil in JavaToDev

Spring Boot 3 + Spring Security 6 : JWT Authentication & Authorization


you’ll learn how to implement JWT authentication and authorization in a Spring Boot 3.0
application using Spring Security 6 You’ll see how…

12 min read · Oct 29

183 4
Hasan Khan in Stackademic

Connecting multiple databases in Spring boot


In this tutorial we are going to learn how to connect multiple database in spring boot
application.

3 min read · Oct 2

12

See more recommendations

You might also like