Skip to content

Profiles

Managing Application with Profiles

  • For example, you want to set different log level in Development and Production Environments.
Log Level Spring FrameworkDescription
tracemore detailed information about the flow of the system
debugInformation about the flow of the system
infoevents occurring at the run time
warningwarning for the errors caused due to the usage of deprecated APIs.
errorruntime errors
offturn off the log
  • For example, you have 2 environments, dev and prod. Then, you can create 2 (two) properties. application-dev.properties and application-prod.properties
properties
logging.level.org.springframework=info

nestapp-service.url=http://localhost:8081
properties
server.port=8085 // custom port
logging.level.org.springframework=info
properties
server.port=8081 // custom port
spring.profiles.active=dev // or prod or other environments
java
package com.alibaihaqi.springboot.springapp;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@ConfigurationProperties(prefix = "nestapp-service")
@Component
public class NestAppConfiguration {
    private String url;


    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}
java
package com.alibaihaqi.springboot.springapp;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

//nestapp-service.url=
@RestController
public class NestAppConfigurationController {

    @Autowired
    private NestAppConfiguration configuration;

    /**
     * @return: NestAppConfiguration -> { url: string }
     */
    @GetMapping("/nestapp-configuration") // Path Implementation
    public NestAppConfiguration nestappcConfigurationResponse() {
        return configuration;
    }
}

Maven Build (on IntelliJ IDEA CE)

You can try to execute the Maven Build with these following steps:

  • Open the Run/Debug Configurations, and click + button
  • Select the Maven option
  • You'll see the display something like this

Run Debug Config

  • Add clean install to the command line section make sure the build runs
    • clean: attempts to clean the files and directories generated by Maven during its build
    • install: compile, test, and package the Java project and copy .jar file into your local Maven repository
  • You need to select the maven build runner to trigger the build (not the previous one)
  • After finished, you can see the jar SNAPSHOT will be generated and moved into your local repository

Maven Build JAR

  • You can start your built .jar file by going to the directory first
  • Then, run the command java -jar <jar_name_to_run>.jar

Actuator

To help you monitor your application in Production, you can use Spring Boot Actuator, by add the dependency through your pom.xml file

xml
<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>

    <dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-actuator</artifactId>
	</dependency>
</dependencies>
  • For example, after you rebuild the package, run the application, and open the path http://localhost:8080/actuator, you might see the response like this:
json
{
	"_links": {
		"self": {
			"href": "http://localhost:8080/actuator",
			"templated": false
		},
		"health-path": {
			"href": "http://localhost:8080/actuator/health/{*path}",
			"templated": true
		},
		"health": {
			"href": "http://localhost:8080/actuator/health",
			"templated": false
		}
	}
}
  • You can use the /actuator/health path as your health check, you might get response like this:
json
{
    "status": "UP"
}
  • You can enable another features from actuator package by activating it through application.properties
properties
management.endpoints.web.exposure.include=*
properties
management.endpoints.web.exposure.include=health,metrics // specific property might be great to minimize load
  • You might see additional properties and link
Response
json
{
	"_links": {
		"self": {
			"href": "http://localhost:8080/actuator",
			"templated": false
		},
		"beans": {
			"href": "http://localhost:8080/actuator/beans",
			"templated": false
		},
		"caches-cache": {
			"href": "http://localhost:8080/actuator/caches/{cache}",
			"templated": true
		},
		"caches": {
			"href": "http://localhost:8080/actuator/caches",
			"templated": false
		},
		"health": {
			"href": "http://localhost:8080/actuator/health",
			"templated": false
		},
		"health-path": {
			"href": "http://localhost:8080/actuator/health/{*path}",
			"templated": true
		},
		"info": {
			"href": "http://localhost:8080/actuator/info",
			"templated": false
		},
		"conditions": {
			"href": "http://localhost:8080/actuator/conditions",
			"templated": false
		},
		"configprops": {
			"href": "http://localhost:8080/actuator/configprops",
			"templated": false
		},
		"configprops-prefix": {
			"href": "http://localhost:8080/actuator/configprops/{prefix}",
			"templated": true
		},
		"env": {
			"href": "http://localhost:8080/actuator/env",
			"templated": false
		},
		"env-toMatch": {
			"href": "http://localhost:8080/actuator/env/{toMatch}",
			"templated": true
		},
		"loggers": {
			"href": "http://localhost:8080/actuator/loggers",
			"templated": false
		},
		"loggers-name": {
			"href": "http://localhost:8080/actuator/loggers/{name}",
			"templated": true
		},
		"heapdump": {
			"href": "http://localhost:8080/actuator/heapdump",
			"templated": false
		},
		"threaddump": {
			"href": "http://localhost:8080/actuator/threaddump",
			"templated": false
		},
		"metrics-requiredMetricName": {
			"href": "http://localhost:8080/actuator/metrics/{requiredMetricName}",
			"templated": true
		},
		"metrics": {
			"href": "http://localhost:8080/actuator/metrics",
			"templated": false
		},
		"scheduledtasks": {
			"href": "http://localhost:8080/actuator/scheduledtasks",
			"templated": false
		},
		"mappings": {
			"href": "http://localhost:8080/actuator/mappings",
			"templated": false
		}
	}
}