Как отделить конфиг приложения от AP в контейнере на Kuberetes? - PullRequest
1 голос
/ 28 июня 2019

Я хочу развернуть приложение, которое использует экстенг-конфиг на Kubernetes.Я создал весеннее загрузочное приложение для файла war и поместил его в веб-сферу.Затем поместите application.properties в /config/config (/config - это ярлык /opt/ibm/wlp/usr/servers/defaultServer), который я хочу использовать в своем приложении.Я пишу Dockerfile, как показано ниже:

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 в качестве папки ресурса конфигурации.

<?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>

И добавляю этот код для чтения application.properties в ${server.config.dir}/config.

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);
    }

}

Однако, когда я запускаюсервер мое приложение, он все еще читает application.properties, который находится в файле войны.Что мне нужно сделать, чтобы приложение использовало application.properties в ${server.config.dir}/config.

1 Ответ

0 голосов
/ 28 июня 2019

Является ли проблема, которую getClass().getResourceAsStream("relative-path") ищет в пакете Java указанного класса?То есть, любой подкаталог соответствует пакету Java IbankServlet.Другими словами, находится ли ваш application.properties в файле WAR в подкаталоге пакета?

Если это так, вам нужно либо изменить значение на getClass().getResourceAsStream("/application.properties") (с ведущей косой чертой), и переместить егов корневой каталог classpath в вашем WAR-файле, или пусть ваш Docker-файл скопирует его в правильный подкаталог.

Однако, если ваш IbankServlet на самом деле вообще отсутствует в пакете Java, это, вероятно, непроблема.)

(Но, я признаю, я не уверен в приоритете, если файл существует как в вашей WAR, так и в «общей библиотеке».)

...