Java 地图的输入值取决于spring中的环境变量
我在应用程序上下文xml中声明了一个spring映射,如下所示:Java 地图的输入值取决于spring中的环境变量,java,spring,Java,Spring,我在应用程序上下文xml中声明了一个spring映射,如下所示: <map> <entry key="mykey"> <value>${${env}.userkey}</value> </entry> </map> <map> <entry key="mkey" value="#{ systemProperties['env'] + '.userkey' }" /&
<map>
<entry key="mykey">
<value>${${env}.userkey}</value>
</entry>
</map>
<map>
<entry key="mkey" value="#{ systemProperties['env'] + '.userkey' }" />
</map>
${${env}.userkey}
然而,环境永远不能替代价值。有办法做到这一点吗
谢谢
Sean如果您使用的是Spring 3 在Spring配置中,您可以使用,您需要的可能是:
<map>
<entry key="mykey">
<value>${${env}.userkey}</value>
</entry>
</map>
<map>
<entry key="mkey" value="#{ systemProperties['env'] + '.userkey' }" />
</map>
如果您使用的是Spring 3 在Spring配置中,您可以使用,您需要的可能是:
<map>
<entry key="mykey">
<value>${${env}.userkey}</value>
</entry>
</map>
<map>
<entry key="mkey" value="#{ systemProperties['env'] + '.userkey' }" />
</map>
#{systemProperties}是否支持环境变量?使用PropertyPlaceHolderConfigure有什么好处,它可以()
单元测试:
package org.test;
import static org.junit.Assert.assertEquals;
import java.util.Map;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class EnvTest {
@Resource
private Map<String, String> map;
@Test
public void testMap() throws Exception {
assertEquals("Me", map.get("mykey"));
}
}
package-org.test;
导入静态org.junit.Assert.assertEquals;
导入java.util.Map;
导入javax.annotation.Resource;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入org.springframework.test.context.ContextConfiguration;
导入org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@上下文配置
@RunWith(SpringJUnit4ClassRunner.class)
公营考试{
@资源
私人地图;
@试验
public void testMap()引发异常{
assertEquals(“我”,map.get(“我的钥匙”);
}
}
#{systemProperties}是否支持环境变量?使用PropertyPlaceHolderConfigure有什么好处,它可以()
单元测试:
package org.test;
import static org.junit.Assert.assertEquals;
import java.util.Map;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class EnvTest {
@Resource
private Map<String, String> map;
@Test
public void testMap() throws Exception {
assertEquals("Me", map.get("mykey"));
}
}
package-org.test;
导入静态org.junit.Assert.assertEquals;
导入java.util.Map;
导入javax.annotation.Resource;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入org.springframework.test.context.ContextConfiguration;
导入org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@上下文配置
@RunWith(SpringJUnit4ClassRunner.class)
公营考试{
@资源
私人地图;
@试验
public void testMap()引发异常{
assertEquals(“我”,map.get(“我的钥匙”);
}
}
我不做Spring,但那应该是EL还是什么专有的东西?如果是EL,${env}
应该在什么范围内?请求、会话或应用程序?env可以是系统属性或环境变量。在我的测试中,我在java命令行中使用系统属性:-Denv=localAh好吧,这将是一些专有的东西。抱歉,不知道:)如果它是EL,并且${env}
在应用程序范围内,那么${applicationScope[env].userkey}
应该可以工作。添加信息,您正在使用的Switch Spring版本。我不做Spring,但这应该是EL还是什么专有的?如果是EL,${env}
应该在什么范围内?请求、会话或应用程序?env可以是系统属性或环境变量。在我的测试中,我在java命令行中使用系统属性:-Denv=localAh好吧,这将是一些专有的东西。抱歉,不知道:)如果它是EL并且${env}
在应用程序范围内,那么${applicationScope[env].userkey}
应该可以工作。添加信息,您正在使用的witch Spring版本。该'env'
不应该被取消引号,因为它也是一个变量吗?不,它不是var-它的键和系统属性是一个映射。它不工作。当'env=local'时,它不会第二次替换'local.userkey'。也许你可以试试{{{…}?那'env'
不应该被取消引号,因为那也是一个变量吗?不,它不是var-它的键和systemProperties
是一个映射。它不起作用。当“env=local”时,它不会对“local.userkey”进行第二次替换。也许您可以尝试{{{{…}?systemProperties
不做,但systemEnvironment
做;]属性占位符是一个很好的方法,但是,您只提供了从自定义文件读取属性的方法,没有提供环境或cmd args。根据和属性属性,属性占位符也搜索环境和系统属性。我的问题是,它与包含oauth命名空间的spring-servlet.xml不兼容。当我将其移动到另一个xml中时,它会工作。systemProperties
不工作,但systemEnvironment
工作;]属性占位符是一个很好的方法,但是,您只提供了从自定义文件读取属性的方法,没有提供环境或cmd args。根据和属性属性,属性占位符也搜索环境和系统属性。我的问题是,它与包含oauth命名空间的spring-servlet.xml不兼容。当我将它移动到另一个xml中时,它就工作了。