'Spring - show git commit ID on custom health endpoint

I am trying to show the Git version info (branch, commit etc) on my custom health endpoint.

I tried using management.info.git.mode=full + git-commit-id-plugin but there is no direct way to extract the git info into a Java class. If there is, this will be the ideal way.

I also tried the same git-commit-id-plugin with Value annotations in my Java class like so @Value("${git.commit.id}") but Spring can't find the property values. I see the git.properties file created in the target dir.

What am I missing here? thanks in advance



Solution 1:[1]

We have to configure PropertyPlaceHolderConfigurer bean so that we can able to access the property file generated by the plugin, Please use the below code for your reference,

@Bean
    public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
        PropertySourcesPlaceholderConfigurer propsConfig 
          = new PropertySourcesPlaceholderConfigurer();
        propsConfig.setLocation(new ClassPathResource("git.properties"));
        propsConfig.setIgnoreResourceNotFound(true);
        propsConfig.setIgnoreUnresolvablePlaceholders(true);
        return propsConfig;
    }

then in your custom health check class, you can use,

@Value("${git.commit.id}") private String commitId;

I hope this will resolve your problem.

Solution 2:[2]

With Spring Boot 2 you can get this information using git-commit-id-plugin in info endpoint. This is how you can configure it POM File

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>build-info</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>pl.project13.maven</groupId>
                <artifactId>git-commit-id-plugin</artifactId>
            </plugin>           
        </plugins>
    </build>

Sample Response http://localhost:8080/actuator/info

{ 
"git":{ 
"branch":"some-name",
"commit":{ 
"id":"ef569c2",
"time":1579000598.000000000
}
},
"build":{ 
"artifact":"xxx",
"name":"xxxx",
"time":1579020527.139000000,
"version":"0.0.1-SNAPSHOT",
"group":"xxxx"
}
} 

Solution 3:[3]

The easies way is to use the commit plugin:

https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.build.generate-git-info

It generates git.properties. Then Spring autoconfiguration jumps in. When git.properties is available in the classpath, it creates GitProperties bean:

https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints.info.git-commit-information

Simply inject GitProperties to your bean and use it.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 VelNaga
Solution 2 Niraj Sonawane
Solution 3 kgtgit