我在TomEE中运行了一个小型Spring应用程序。在Tomee Context.xml文件中,我定义了一个具有已定义名称的环境条目,我可以在我的应用程序上下文中使用" jee:jndi-lookup"成功查找。
我还在tomee.xml文件中定义了一个数据源资源,我可以使用名称" openejb:Resource / foo"查找JNDITemplate.lookup(),如果我的数据源&#34 ; ID"财产是" foo"。
我无法弄清楚如何使用JNDITemplate查找环境条目。如果环境"名称"属性是" foo",我为" lookup()"的参数输入什么?我尝试了很多变化,但我无法工作。
我一直觉得JNDI令人沮丧的一件事是,似乎很难编写一些测试代码,只打印出环境中的所有内容,所以我可以看到我的内容应该寻找。我常常不得不简单猜猜前缀是什么。
答案 0 :(得分:0)
一个简单的类,用于查找spring应用程序中的所有属性(包括系统属性):
import javax.annotation.PostConstruct;
import java.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.AbstractEnvironment;
import org.springframework.core.env.Environment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.PropertySource;
import org.springframework.stereotype.Service;
@Service
public class Test {
@Autowired
Environment env;
@PostConstruct
public void init(){
Map<String, Object> map = new HashMap();
for(Iterator it = ((AbstractEnvironment) env).getPropertySources().iterator(); it.hasNext(); ) {
PropertySource propertySource = (PropertySource) it.next();
if (propertySource instanceof MapPropertySource) {
map.putAll(((MapPropertySource) propertySource).getSource());
}
}
map.entrySet().forEach( entry -> System.out.println("key "+entry.getKey()+" value "+entry.getValue()));
}
}
如果想要动态更改查找名称,请考虑使用@Value(&#34; $ {jndi.name}&#34;)