Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Micronaut: Inject a property value using @property annotation

@Property annotation is used to inject a value associated with given property name.

 

Example

@Property(name = "spring.datasource.communicationtimeout")
protected Integer communicationTimeout;

 

Above statement resolve the value associated with the property "spring.datasource.communicationtimeout" and inject it into the field ‘communicationTimeout’. As a recommendation from Micronaut, fields subject to injection should not be private because expensive reflection must be used.

 

Can I apply @Property annotation on setter method arguments?

Yes, you can.

 

@Inject
public void setVersion(@Property(name = "appVersion") String version) {
	this.version = version;
}

Resolve submaps using Property annotation

Example application.yml configuration

appName: chat server
appVersion: 1.23.45

spring:   
  datasource:
    communicationtimeout: 6000
    jpa:
      hibernate:
        ddl-auto: none
    hikari:
      connection-timeout: 3000
      idle-timeout: 40000
      max-lifetime: 10000
      maximum-pool-size: 5

To resolve a flattened map containing only the properties starting with hibernate, use @Property, for example: 

@Property(name = "spring.datasource")
@MapFormat(transformation = MapTransformation.FLAT)
protected Map datasourceFlatMap;

‘datasourceFlatMap’ contain below information.

communicationtimeout -> 6000
jpa.hibernate.ddl-auto -> none
hikari.connection-timeout -> 3000
hikari.idle-timeout -> 40000
hikari.max-lifetime -> 10000
hikari.maximum-pool-size -> 5

If you do not specify any transformation explicitly, then it is NESTED by default.

@Property(name = "spring.datasource")
@MapFormat
protected Map datasourceNestedMap;

‘datasourceNestedMap’ contain below information.

communicationtimeout -> 6000
jpa -> {hibernate={ddl-auto=none}}
hikari -> {connection-timeout=3000, idle-timeout=40000, max-lifetime=10000, maximum-pool-size=5}

Find the below working application.

 

Step 1: Create new maven project ‘micronaut-property-annotation-demo’.

 

Step 2: Update pom.xml with maven dependencies.

 

pom.xml

project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  modelVersion>4.0.0modelVersion>
  groupId>com.sample.appgroupId>
  artifactId>micronaut-property-annotation-demoartifactId>
  version>1version>

  properties>
    maven-compiler-plugin.version>3.8.1maven-compiler-plugin.version>
    micronaut.version>3.7.3micronaut.version>
    slf4j.version>2.0.3slf4j.version>
    maven-compiler-plugin.version>3.8.1maven-compiler-plugin.version>

    maven.compiler.target>15maven.compiler.target>
    maven.compiler.source>15maven.compiler.source>
  properties>

  dependencies>

    dependency>
      groupId>io.micronautgroupId>
      artifactId>micronaut-inject-javaartifactId>
      version>${micronaut.version}version>
    dependency>

    dependency>
      groupId>org.slf4jgroupId>
      artifactId>slf4j-apiartifactId>
      version>${slf4j.version}version>
    dependency>
    dependency>
      groupId>org.slf4jgroupId>
      artifactId>slf4j-simpleartifactId>
      version>${slf4j.version}version>
    dependency>

  dependencies>

  build>
    plugins>
      plugin>
        groupId>org.apache.maven.pluginsgroupId>
        artifactId>maven-compiler-pluginartifactId>
        version>${maven-compiler-plugin.version}version>
        configuration>
          annotationProcessorPaths>
            path>
              groupId>io.micronautgroupId>
              artifactId>micronaut-inject-javaartifactId>
              version>${micronaut.version}version>
            path>
          annotationProcessorPaths>
        configuration>
      plugin>

      plugin>
        artifactId>maven-assembly-pluginartifactId>
        configuration>
          archive>
            manifest>
              mainClass>com.sample.app.AppmainClass>
            manifest>
          archive>
          descriptorRefs>
            descriptorRef>jar-with-dependenciesdescriptorRef>
          descriptorRefs>
        configuration>

        executions>
          execution>
            id>make-assemblyid>
            phase>packagephase>
            goals>
              goal>singlegoal>
            goals>
          execution>
        executions>
      plugin>

    plugins>
  build>
project>

Step 3: Create application.yml file under src/main/resources folder.

 

application.yml

appName: chat server
appVersion: 1.23.45

spring:   
  datasource:
    communicationtimeout: 6000
    jpa:
      hibernate:
        ddl-auto: none
    hikari:
      connection-timeout: 3000
      idle-timeout: 40000
      max-lifetime: 10000
      maximum-pool-size: 5

Step 4: Define AppConfig class.

 

AppConfig.java

package com.sample.app.configs;

import java.util.Map;

import io.micronaut.context.annotation.Property;
import io.micronaut.core.convert.format.MapFormat;
import io.micronaut.core.convert.format.MapFormat.MapTransformation;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;

@Singleton
public class AppConfig {

  @Property(name = "app-name")
  protected String name;

  protected String version;

  @Property(name = "spring.datasource.communicationtimeout")
  protected Integer communicationTimeout;

  @Property(name = "spring.datasource")
  @MapFormat(transformation = MapTransformation.FLAT)
  protected Map datasourceFlatMap;

  @Property(name = "spring.datasource")
  @MapFormat
  protected Map datasourceNestedMap;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getVersion() {
    return version;
  }

  @Inject
  public void setVersion(@Property(name = "appVersion") String version) {
    this.version = version;
  }

  public Integer getCommunicationTimeout() {
    return communicationTimeout;
  }

  public void setCommunicationTimeout(Integer communicationTimeout) {
    this.communicationTimeout = communicationTimeout;
  }

  public MapgetDatasourceFlatMap() {
    return datasourceFlatMap;
  }

  public void setDatasourceFlatMap(Map datasourceFlatMap) {
    this.datasourceFlatMap = datasourceFlatMap;
  }

  public MapgetDatasourceNestedMap() {
    return datasourceNestedMap;
  }

  public void setDatasourceNestedMap(Map datasourceNestedMap) {
    this.datasourceNestedMap = datasourceNestedMap;
  }

}

Step 5: Define main application class.

 

App.java

package com.sample.app;

import java.util.Map;

import com.sample.app.configs.AppConfig;

import io.micronaut.context.ApplicationContext;

public class App {

  public static void main(String[] args) {

    try (ApplicationContext applicationContext = ApplicationContext.run()) {

      AppConfig appConfig = applicationContext.getBean(AppConfig.class);

      String appName = appConfig.getName();
      String version = appConfig.getVersion();
      Integer datasourceTimeout = appConfig.getCommunicationTimeout();

      System.out.println("appName : " + appName);
      System.out.println("version : " + version);
      System.out.println("datasourceTimeout : " + datasourceTimeout + "\n");

      System.out.println("\nFlat map informaiton");
      Map datasourceProperties = appConfig.getDatasourceFlatMap();
      for (String key : datasourceProperties.keySet()) {
        System.out.println(key + " -> " + datasourceProperties.get(key));
      }
      
      System.out.println("\nNested map informaiton");
      datasourceProperties = appConfig.getDatasourceNestedMap();
      for (String key : datasourceProperties.keySet()) {
        System.out.println(key + " -> " + datasourceProperties.get(key));
      }
    }

  }
}

Total project structure looks like below.





Build the project using mvn package command.

Navigate to the folder where pom.xml is located and execute the command ‘mvn package’.

 

Upon command successful execution, you can see the jar file ‘micronaut-property-annotation-demo-1-jar-with-dependencies.jar’ in project target folder.


$ls ./target/
archive-tmp
classes
generated-sources
generated-test-sources
maven-archiver
maven-status
micronaut-property-annotation-demo-1-jar-with-dependencies.jar
micronaut-property-annotation-demo-1.jar
test


This post first appeared on Java Tutorial : Blog To Learn Java Programming, please read the originial post: here

Share the post

Micronaut: Inject a property value using @property annotation

×

Subscribe to Java Tutorial : Blog To Learn Java Programming

Get updates delivered right to your inbox!

Thank you for your subscription

×