如何从SpringJava配置中访问-D参数?

如何从SpringJava配置中访问-D参数?,java,spring,spring-boot,Java,Spring,Spring Boot,我正在考虑将我的SpringXML配置迁移到Java中。我的占位符配置程序有问题 在XML中,我将“位置”设置为 <property name="locations"> <list> ... <value>file:////${project.home}/conf/jdbc.properties</value> </list> &

我正在考虑将我的SpringXML配置迁移到Java中。我的占位符配置程序有问题

在XML中,我将“位置”设置为

<property name="locations">
        <list>
            ...
            <value>file:////${project.home}/conf/jdbc.properties</value>
        </list>
    </property>

因此,如果我想将PropertySourcesPlaceholderConfigurer.setLocations与system.property一起使用,我该如何做?非常感谢指针。

system.getProperty将使用-D java选项为您提供属性集,因为您正试图调用
PropertySourcePlaceholderConfigurer.setLocations()
对于自定义位置,您可能应该使用注释

@Configuration
@PropertySource(value="file://#{systemProperties['project.home']}/conf/jdbc.properties")
public class MyConfig {

}

如果您需要更细粒度的控制,例如如果您的位置使用模式,您还可以配置
属性资源占位符配置器
bean。有关更多详细信息,请参阅。

上下文:属性占位符@Value注释的组合可用于将一组属性注入Spring豆子容易吃


以下是完成此操作的三个步骤:

步骤1:'key=value'类型文件中定义所有必需的属性

应用程序属性

步骤2:使用属性占位符指定application.properties文件在bean配置中的位置

步骤3:在Java程序中使用@Value注释获取属性


以下是一个工作示例的代码片段:

步骤1:以“键=值”格式定义属性

# File name: application.properties

db.schema=my_schema
db.host=abc.xyz.com:3306
db.table=my_table
步骤2:使用属性占位符提及属性文件的位置

<beans xmlns="http://www.springframework.org/schema/beans" ...>

    <context:property-placeholder location="classpath:application.properties"/>

    <!-- other content -->
</beans>
对showConfig()调用的输出

更多信息:


是的,但是我必须在我的java配置类中手动将文件url字符串连接在一起,我希望有任何方法可以像在xml中那样进行连接。连接有什么问题吗?如果需要,还可以使用string.format()为了避免字符串concat。我认为java没有任何表达式来替换JVM参数中的值。如果您使用Spring,更简单的方法是使用@Value注释。它还可以从JVM参数中读取@Value(${Spring.project.home}/abc.properties)私有字符串projectHome;但我不想用java硬编码到项目home的路径,我想在程序启动时用jvm参数设置它。我希望“classpath:……”来自系统属性。根据使用
{systemProperties}
语法更新
<beans xmlns="http://www.springframework.org/schema/beans" ...>

    <context:property-placeholder location="classpath:application.properties"/>

    <!-- other content -->
</beans>
package com.example.demo;

import org.springframework.beans.factory.annotation.Value;


public class MyProgram {

    @Value("${db.host}")
    private String dbHost;

    @Value("${db.schema}")
    private String dbSchema;

    @Value("${db.table}")
    private String dbTable;

    @Override
    public void showConfig() {
        System.out.println("DB Host = " + dbSchema);
        System.out.println("DB Schema = " + dbSchema);
        System.out.println("DB Table = " + dbSchema);
    }
}
DB Host = abc.xyz.com:3306
DB Schema =  my_schema
DB Table = my_table