如何从SpringJava配置中访问-D参数?
我正在考虑将我的SpringXML配置迁移到Java中。我的占位符配置程序有问题 在XML中,我将“位置”设置为如何从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> &
<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