从 server.xml 按名称读取变量

bob*_*e01 2 java xml web-applications websphere-liberty

<?xml version="1.0" encoding="UTF-8"?>
<server>

  <variable 
    name="temp" 
    value="Something" />
</server>
Run Code Online (Sandbox Code Playgroud)

如何以编程方式temp从基于 Java 的 Web 应用程序读取xml 文件?

尝试着:

String temp = System.getenv("temp");
Run Code Online (Sandbox Code Playgroud)

And*_*ert 5

有几个选项你必须这样做:

1. 使用 MicroProfile 配置

server.xml

<featureManager>
  <feature>mpConfig-1.3</feature>
  ....
</featureManager>

<variable  name="temp"  value="Something" />
Run Code Online (Sandbox Code Playgroud)

然后注入任何 CDI bean:

@Inject
@ConfigProperty(name = "temp")
String temp;
Run Code Online (Sandbox Code Playgroud)

2. 将变量存储在 JNDI 中 <jndiEntry>

server.xml

<featureManager>
  <feature>jndi-1.0</feature>
  ....
</featureManager>

<jndiEntry jndiName="config/foo" value="whatever"/>
<jndiEntry jndiName="config/bar" value="${temp}"/>
<jndiEntry jndiName="config/configDir" value="${server.config.dir}"/>
Run Code Online (Sandbox Code Playgroud)

在 servlet 或 EJB(或其他托管类)中注入资源:

@Resource(lookup = "config/foo")
String foo;
Run Code Online (Sandbox Code Playgroud)

或程序化 JNDI 查找:

String configDir = InitialContext.doLookup("config/configDir");
Run Code Online (Sandbox Code Playgroud)

3. 使用环境变量:

此方法要求您在${server.config.dir}/server.env中或在启动 Liberty 服务器的进程的环境中设置环境变量。这里的所有内容都将在服务器 JVM 的 env 中结束。

temp=Something
foo=bar
Run Code Online (Sandbox Code Playgroud)

然后在应用程序中获取 env var:

String temp = System.getenv("temp");
Run Code Online (Sandbox Code Playgroud)