如何注入SpringApp的SpringApplication的mainApplicationClass?

时间:2015-09-02 16:10:54

标签: java spring maven spring-boot manifest

实际上我对'实施版本'更感兴趣来自与此类jar相关联的MANIFEST.MF文件的信息。我需要提供类似默认清单servlet的东西,我还将提供由buildnumber-maven-plugin提供的SCM提交版本。有没有简单的方法来注入主应用程序类?

2 个答案:

答案 0 :(得分:3)

您是否只是尝试将MANIFEST.MF定义为属性来源,然后只是自动装配值?

@SpringBootApplication
@PropertySource("META-INF/MANIFEST.MF")
public class Application implements CommandLineRunner {

    @Value("${Spring-Boot-Version:notfound}")
    String springBootVersion;

    @Value("${Implementation-Version:notfound}")
    String implementationVersion;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println("springBootVersion is " + springBootVersion);
        System.out.println("implementationVersion is " + implementationVersion);
    }

}

这将打印:

springBootVersion is 1.2.5.RELEASE
implementationVersion is 0.1.0

MANIFEST.MF已经有点yaml格式并且启动了解它。

答案 1 :(得分:1)

您可以使用此插件创建属性文件,您可以在其中轻松读取任何其他属性文件。

有“buildNumberPropertiesFileLocation”选项,您可以在其中指定属性文件位置。只需将它放在src / main / resources / version.properties中,然后在spring应用程序中将其作为常规属性源读取。您还可以指定属性名称。

只需查看文档中的可用选项:buildnumber-maven-plugin docs

您可以使用属性占位符

读取属性
  <bean 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

    <property name="location">
        <value>version.properties</value>
    </property>
</bean>

或使用注释:

@PropertySource({ "classpath:version.properties" })
@Configuration
class SomeConfigClass {}

然后您可以简单地将属性注入服务类/控制器

@Value( "${project.version}" )
private String projectVersion;

我已经检查过Spring启动代码,我认为主应用程序类仅用于记录目的,所以如果你想在运行时读取它你必须以某种方式将它注入应用程序上下文或定义系统属性whitch 将在运行时读取。