java配置文件变量替换_Spring PropertyPlaceholderConfigurer Usage - 使用系统变量替换spring配置文件中的变量...

本文介绍如何使用Spring框架的PropertyPlaceholderConfigurer来从系统环境变量中读取属性值,并应用于Java Bean的注入过程。通过实例演示了如何配置spring.xml,定义属性占位符及使用Java程序设置系统属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

但是在有些情况下我们的属性并不是配置在properties文件中,而是通过Java启动时的-Dname=value参数设置在java系统环境中,此时如果在java里我们可以使用System.getProperty(name)来获取属性值,而在spring里我们就可以通过PropertyPlaceholderConfigurer类来获取。

1. 首先创建一个Java Bean

package test;

import org.apache.commons.lang.builder.ToStringBuilder;

public class MyBean {

private String name;

private String prop1;

private String prop2;

private String prop3;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getProp1() {

return prop1;

}

public void setProp1(String prop1) {

this.prop1 = prop1;

}

public String getProp2() {

return prop2;

}

public void setProp2(String prop2) {

this.prop2 = prop2;

}

public String getProp3() {

return prop3;

}

public void setProp3(String prop3) {

this.prop3 = prop3;

}

@Override

public String toString() {

return ToStringBuilder.reflectionToString(this);

}

}

2. 创建spring.xml文件

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"

default-lazy-init="true">

classpath:test/spring.properties

1

true

true

${name}

${prop1}

${prop2}

${prop3}

配置文件中使用${name},${propx}来说明需要使用properties文件中的内容替换

3. 创建spring.properties文件,这里变量可以递归引用当前properties文件中定义的别的变量

name=kongxx

prop1=111

prop2=${prop1}222

prop3=${prop2}333

4. 写一个测试程序

package test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

public static void main(String[] args) {

System.setProperty("name", "Mandy");

System.setProperty("prop1", "111");

System.setProperty("prop2", "222");

System.setProperty("prop3", "333");

ApplicationContext ctx = new ClassPathXmlApplicationContext(

"/test/spring.xml");

MyBean myBean = (MyBean) ctx.getBean("myBean");

System.out.println(myBean);

}

}

这里去我在启动前通过System.setProperty(key)来模拟java中通过-D传递参数的情况。运行测试程序,输出如下:

test.MyBean@1649b44[name=kongxx,prop1=111,prop2=222,prop3=333]

这里其实spring是忽略的properties文件里的配置而使用的系统环境中的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值