首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Kuberetes上的容器中分离应用配置和AP?

如何在Kuberetes上的容器中分离应用配置和AP?
EN

Stack Overflow用户
提问于 2019-06-28 13:36:33
回答 1查看 92关注 0票数 1

我想在Kubernetes上部署一个使用扩展配置的应用程序。我在war文件中构建了一个spring boot应用程序,并将其放入websphere file中。然后将application.properties放在/config/config中( /config/opt/ibm/wlp/usr/servers/defaultServer的快捷方式),我希望我的应用程序使用它。我编写一个Dockerfile,如下所示:

代码语言:javascript
复制
FROM websphere-liberty:19.0.0.6-javaee8
USER root
RUN mkdir -p /ibank-pv && chown -R 1001:0 /ibank-pv
RUN mkdir -p /config/config/ && chown -R 1001:0 /config/config
COPY --chown=1001:0 ibank.war /config/apps/
COPY --chown=1001:0 server.xml /config
COPY --chown=1001:0 application.properties /config/config/
USER 1001
CMD ["/opt/ibm/wlp/bin/server","run","defaultServer"]

这是我的server.xml。我将${server.config.dir}/config设置为配置资源文件夹。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<server description="new server">
    <featureManager>
        <feature>javaee-8.0</feature>
    </featureManager>

    <basicRegistry id="basic" realm="BasicRealm">
        <!-- <user name="yourUserName" password="" />  -->
    </basicRegistry>

    <httpEndpoint id="defaultHttpEndpoint"
                  httpPort="9080"
                  httpsPort="9443" />

    <applicationManager autoExpand="true"/>

    <library id="configResources">
        <folder dir="${server.config.dir}/config" />
    </library>

    <application location="ibank.war">
        <classloader privateLibraryRef="configResources" />
    </application>
</server>

我添加了这些代码来读取${server.config.dir}/config中的application.properties。

代码语言:javascript
复制
public class IbankServlet extends HttpServlet {

    private static final long serialVersionUID = 7526471155622776147L;

    private final Properties config;

    public IbankServlet() throws Exception {
        InputStream is = getClass().getResourceAsStream("application.properties");
        config = new Properties();
        config.load(is);
    }

}

但是,当我启动服务器我的应用程序时,它仍然读取war文件中的application.properties。我要做的是让我的应用程序在${server.config.dir}/config中使用application.properties

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-29 01:53:36

getClass().getResourceAsStream("relative-path")在指定类的Java包中查找的问题是什么?也就是说,无论哪个子目录对应于IbankServlet的Java包。换句话说,WAR文件中的application.properties是否隐藏在包子目录中?

如果是这样,您需要更改为getClass().getResourceAsStream("/application.properties") (带有前导斜杠),并将其移动到WAR文件中的类路径根目录,或者让您的Docker文件将其复制到正确的子目录中。

但是,如果您的IbankServlet实际上根本不在Java包中,这可能不是问题所在。)

(但我也承认,如果一个文件同时存在于您的WAR和“共享库”中,我不确定其优先级。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56801434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档