Expand Authors Top

If you have a few years of experience in the Java ecosystem and you’d like to share that with the community, have a look at our Contribution Guidelines.

Expanded Audience – Frontegg – Security (partner)
announcement - icon User management is very complex, when implemented properly. No surprise here.

Not having to roll all of that out manually, but instead integrating a mature, fully-fledged solution - yeah, that makes a lot of sense.
That's basically what Frontegg is - User Management for your application. It's focused on making your app scalable, secure and enjoyable for your users.
From signup to authentication, it supports simple scenarios all the way to complex and custom application logic.

Have a look:

>> Elegant User Management, Tailor-made for B2B SaaS

NPI – Spring Top – Temp – Non-Geo (Lightrun)

Get started with Spring 5 and Spring Boot 2, through the reference Learn Spring course:

>> LEARN SPRING
NPI – Lightrun – Spring (partner)

We rely on other people’s code in our own work. Every day. It might be the language you’re writing in, the framework you’re building on, or some esoteric piece of software that does one thing so well you never found the need to implement it yourself.

The problem is, of course, when things fall apart in production - debugging the implementation of a 3rd party library you have no intimate knowledge of is, to say the least, tricky. It’s difficult to understand what talks to what and, specifically, which part of the underlying library is at fault.

Lightrun is a new kind of debugger.

It's one geared specifically towards real-life production environments. Using Lightrun, you can drill down into running applications, including 3rd party dependencies, with real-time logs, snapshots, and metrics. No hotfixes, redeployments, or restarts required.

Learn more in this quick, 5-minute Lightrun tutorial:

>> The Essential List of Spring Boot Annotations and Their Use Cases

1. Overview

One of the ways of configuring Spring applications is using YAML configuration files.

In this quick tutorial, we'll configure different profiles for a simple Spring Boot application using YAML.

Further reading:

A Quick Guide to Spring @Value

Learn to use the Spring @Value annotation to configure fields from property files, system properties, etc.

Using Spring @Value With Defaults

A quick and practical guide to setting default values when using the @Value annotation in Spring.

How to Inject a Property Value Into a Class Not Managed by Spring?

Learn how to initialize properties values in Java classes without the direct use of Spring's injection mechanism.

2. Spring YAML File

Spring profiles help enable Spring Applications to define different properties for different environments.

Let's take a look at a simple YAML file that contains two profiles. The three dashes separating the two profiles indicate the start of a new document, so all the profiles can be described in the same YAML file.

The relative path of the application.yml file is /myApplication/src/main/resources/application.yml:

spring:
    config:
        activate:
            on-profile: test
name: test-YAML
environment: testing
enabled: false
servers: 
    - www.abc.test.com
    - www.xyz.test.com

---
spring:
    config:
        activate:
            on-profile: prod
name: prod-YAML
environment: production
enabled: true
servers: 
    - www.abc.com
    - www.xyz.com

Note that this setup doesn't imply that any of these profiles will be active when we start our application. The properties defined in the profile-specific documents won't be loaded unless we explicitly indicate it; by default, the only active profile will be ‘default.

3. Binding YAML to a Config Class

To load a set of related properties from a properties file, we will create a bean class:

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class YAMLConfig {
 
    private String name;
    private String environment;
    private boolean enabled;
    private List<String> servers = new ArrayList<>();

    // standard getters and setters

}

The annotations used here are:

  • @Configurationthis marks the class as a source of bean definitions
  • @ConfigurationProperties – this binds and validates the external configurations to a configuration class
  • @EnableConfigurationProperties – this annotation is used to enable @ConfigurationProperties annotated beans in the Spring application

4. Accessing the YAML Properties

To access the YAML properties, we'll create an object of the YAMLConfig class, and access the properties using that object.

In the properties file, we'll set the spring.profiles.active environment variable to prod. If we don't define this property, only the ‘default' profile will be active.

The relative path for the properties file is /myApplication/src/main/resources/application.properties:

spring.profiles.active=prod

In this example, we'll display the properties using the CommandLineRunner:

@SpringBootApplication
public class MyApplication implements CommandLineRunner {

    @Autowired
    private YAMLConfig myConfig;

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MyApplication.class);
        app.run();
    }

    public void run(String... args) throws Exception {
        System.out.println("using environment: " + myConfig.getEnvironment());
        System.out.println("name: " + myConfig.getName());
        System.out.println("enabled:" + myConfig.isEnabled());
        System.out.println("servers: " + myConfig.getServers());
    }
}

The output on the command line:

using environment: production
name: prod-YAML
enabled: true
servers: [www.abc.com, www.xyz.com]

5. YAML Property Overriding

In Spring Boot, YAML files can be overridden by other YAML properties files.

Prior to version 2.4.0, YAML properties were overridden by properties files in the following locations, in order of highest precedence first:

  • Profiles' properties placed outside the packaged jar
  • Profiles' properties packaged inside the packaged jar
  • Application properties placed outside the packaged jar
  • Application properties packaged inside the packaged jar

As of Spring Boot 2.4, external files always override packaged files, regardless of whether they're profile-specific or not.

6. Conclusion

In this brief article, we learned how to configure properties in Spring Boot applications using YAML. We also discussed the property overriding rules followed by Spring Boot for YAML files.

The code for this article is available over on GitHub.

Spring bottom

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:

>> THE COURSE
Generic footer banner
Comments are closed on this article!