如何使用Spring JNDITemplate读取Tomcat环境条目

时间:2017-01-14 00:58:31

标签: java spring tomcat

我在TomEE中运行了一个小型Spring应用程序。在Tomee Context.xml文件中,我定义了一个具有已定义名称的环境条目,我可以在我的应用程序上下文中使用" jee:jndi-lookup"成功查找。

我还在tomee.xml文件中定义了一个数据源资源,我可以使用名称" openejb:Resource / foo"查找JNDITemplate.lookup(),如果我的数据源&#34 ; ID"财产是" foo"。

我无法弄清楚如何使用JNDITemplate查找环境条目。如果环境"名称"属性是" foo",我为" lookup()"的参数输入什么?我尝试了很多变化,但我无法工作。

我一直觉得JNDI令人沮丧的一件事是,似乎很难编写一些测试代码,只打印出环境中的所有内容,所以我可以看到我的内容应该寻找。我常常不得不简单猜猜前缀是什么。

1 个答案:

答案 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;)