Системные переменные среды в приложении Jetty

как настроить системные переменные среды внутри одного приложения причала?

например, для деталей подключения к базе данных, положить его в файл и проверить его в cvs-плохая идея. По этой причине использование системной среды-один из способов. В то время как системные переменные среды определены в /etc/environments файл или .bashrc/.zshrc файл, в приложении Jetty, делает System.getenv("variable_name") ничего не давать. Это приведет к нулю.

Я прочитал этот вопрос: настройка a Приложение Jetty с переменными env который заключает то, что говорит, что причал не поддерживает System.getenv() и даже в .

и причал и т. п. окружающая среда в Ubuntu 12.10, который сказал In the jetty.sh script you can source the /etc/environment file and they will be present. который я пробовал и не получил значения, как ожидалось, это дало мне только null.

если я не могу использовать по умолчанию System.getenv() или в тогда как, чтобы указать учетные данные, такие как подключение к базе данных и т. д ?

1 ответов


не поддерживает System.getenv() это не Причальная вещь, а вещь Java.

есть тонна ограничений вокруг System.getenv() и Ваше окружение, что делает его почти бесполезным во всех, кроме самого наивного и основного тестового случая. (например: многострочные значения не поддерживаются. многострочные записи могут прервать синтаксический анализ. ключи без значений не поддерживаются. ключи без значений часто могут сливаться со следующим ключом во время синтаксического анализа. записи с символами, отличными от US-ASCII, не поддерживаются. записи с контролем символы не поддерживаются.)

общий метод при использовании системных переменных среды с программами Java заключается в использовании определенных методов оболочки для получения значений и ввода их либо в командной строке, либо в формат ini-файла для Jetty, чтобы затем использовать.

в зависимости от вашей техники эти значения будут отображаться либо как свойства причала, либо как системные свойства Java.

просто создал проект, чтобы продемонстрировать 4 способа выполнения это

https://github.com/jetty-project/jetty-external-config

внешние свойства конфигурации с причала

демонстрация того, как настроить простые свойства, к которым можно получить доступ Сервлетами внутри причала.

эта демонстрация показывает 4 различных способа настройки свойства во время выполнения это может быть прочитано сервлетом, запущенным внутри Пристань.

реквизит.война!--57-->

это простой файл войны с одним HttpServlet и WEB-INF / web.в XML

[jetty-external-config]$ jar -tvf target/props.war 
     0 Mon Feb 23 09:02:14 MST 2015 META-INF/
   131 Mon Feb 23 09:02:14 MST 2015 META-INF/MANIFEST.MF
     0 Mon Feb 23 09:02:14 MST 2015 WEB-INF/
     0 Mon Feb 23 09:02:14 MST 2015 WEB-INF/classes/
     0 Mon Feb 23 09:02:14 MST 2015 WEB-INF/classes/org/
     0 Mon Feb 23 09:02:14 MST 2015 WEB-INF/classes/org/eclipse/
     0 Mon Feb 23 09:02:14 MST 2015 WEB-INF/classes/org/eclipse/demo/
  2188 Mon Feb 23 09:02:12 MST 2015 WEB-INF/classes/org/eclipse/demo/PropsServlet.class
   572 Mon Feb 23 08:45:22 MST 2015 WEB-INF/web.xml

См. PropsServlet.java для деталей поведения.

просто скомпилируйте верхний уровень, и файл войны будет построен и помещен во все демо-причал.выбор места для этого проекта.

Пример #1: Базовая Командная Строка

на /base-command-line проект содержит простой start.ini который запускает причал на порту 9090 и развертывает webapp. никаких дополнительных настроек не производится конфигурация на диске.

если вы запустите его так ...

[base-command-line]$ java -jar /path/to/jetty-distribution-9.2.7.v20150116/start.jar
2015-02-23 09:15:46.088:INFO::main: Logging initialized @290ms
2015-02-23 09:15:46.222:INFO:oejs.Server:main: jetty-9.2.7.v20150116
2015-02-23 09:15:46.235:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/home/joakim/code/stackoverflow/jetty-external-config/base-command-line/webapps/] at interval 1
2015-02-23 09:15:46.325:INFO:oejw.StandardDescriptorProcessor:main: NO JSP Support for /props, did not find org.eclipse.jetty.jsp.JettyJspServlet
2015-02-23 09:15:46.343:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@6e7f61a3{/props,file:/tmp/jetty-0.0.0.0-9090-props.war-_props-any-27537844855769703.dir/webapp/,AVAILABLE}{/props.war}
2015-02-23 09:15:46.353:INFO:oejs.ServerConnector:main: Started ServerConnector@67cd35c5{HTTP/1.1}{0.0.0.0:9090}
2015-02-23 09:15:46.353:INFO:oejs.Server:main: Started @555ms

вы увидите, что он запущен и развернут в /props контекстный путь.

отсюда вы можете проверить свойства в сервлете с помощью инструментов, таких как wget или curl.

пример:

$ curl http://localhost:9090/props/props

[java.runtime.name] = Java(TM) SE Runtime Environment
[sun.boot.library.path] = /home/joakim/java/jvm/jdk-7u75-x64/jre/lib/amd64
[java.vm.version] = 24.75-b04
[java.vm.vendor] = Oracle Corporation
[java.vendor.url] = http://java.oracle.com/
...
[file.separator] = /
[java.vendor.url.bug] = http://bugreport.sun.com/bugreport/
[sun.io.unicode.encoding] = UnicodeLittle
[sun.cpu.endian] = little
[sun.desktop] = gnome
[sun.cpu.isalist] = 

вы даже можете запросить определенное свойство ..

$ curl http://localhost:9090/props/props/user.timezone
[user.timezone] = America/Phoenix

позволяет остановить сервер и запустить его с системным свойством наших выбор.

уведомления -Dfoo=bar ?

[base-command-line]$ java -Dfoo=bar -jar /path/to/jetty-distribution-9.2.7.v20150116/start.jar
2015-02-23 09:15:46.088:INFO::main: Logging initialized @290ms
2015-02-23 09:15:46.222:INFO:oejs.Server:main: jetty-9.2.7.v20150116
2015-02-23 09:15:46.235:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/home/joakim/code/stackoverflow/jetty-external-config/base-command-line/webapps/] at interval 1
2015-02-23 09:15:46.325:INFO:oejw.StandardDescriptorProcessor:main: NO JSP Support for /props, did not find org.eclipse.jetty.jsp.JettyJspServlet
2015-02-23 09:15:46.343:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@6e7f61a3{/props,file:/tmp/jetty-0.0.0.0-9090-props.war-_props-any-27537844855769703.dir/webapp/,AVAILABLE}{/props.war}
2015-02-23 09:15:46.353:INFO:oejs.ServerConnector:main: Started ServerConnector@67cd35c5{HTTP/1.1}{0.0.0.0:9090}
2015-02-23 09:15:46.353:INFO:oejs.Server:main: Started @555ms

и ищите его через curl ...

$ curl http://localhost:9090/props/props/foo
[foo] = bar

это демонстрирует доступ к свойству, которое было указано через командную строку, теперь давайте посмотрим на другие варианты.

Пример #2: Использование start.ini

на просто start.ini который запускает причал на порту 9090 и развертывает webapp.

этой start.ini содержит foo.ish свойство.

давайте запустим причал и попробуем наш доступ к сервлету реквизита снова ...

[base-startini]$ java -jar /path/to/jetty-distribution-9.2.7.v20150116/start.jar
2015-02-23 09:16:46.088:INFO::main: Logging initialized @290ms
2015-02-23 09:16:46.222:INFO:oejs.Server:main: jetty-9.2.7.v20150116

и запросите его через curl ...

$ curl http://localhost:9090/props/props/foo.ish
[foo.ish] = bar

Пример #3: Использование start.D необязательный ini

на /base-startd проект содержит простой start.ini который запускает причал на порту 9090 и развертывает webapp.

этой start.ini также не содержит никаких дополнительных свойств, которые нас интересуют.

на start.d/myconf.ini содержит свойство foo.d что нас интересует.

давайте запустим причал и попробуем наш доступ к сервлету реквизита снова ...

[base-startd]$ java -jar /path/to/jetty-distribution-9.2.7.v20150116/start.jar
2015-02-23 09:19:46.088:INFO::main: Logging initialized @290ms
2015-02-23 09:19:46.222:INFO:oejs.Server:main: jetty-9.2.7.v20150116

и запросите его через curl ...

$ curl http://localhost:9090/props/props/foo.d
[foo.d] = over here

Пример #4: Использование -- include-jetty-dir optional config

на новый start.ini который запускает причал на порту 9090 и развертывает webapp.

этой start.ini также не содержит дополнительных свойств, которые нас интересуют в.

на start.ini использует --include-jetty-dir=../jettydir дополнительные настройки, которая указывает на совершенно новую interrim пристани.базовый источник конфигурации.

на ../jettydir/start.ini содержит свойство с именем foo.jetty.dir что нас интересует.

давайте запустим причал и попробуем наш доступ к сервлету реквизита снова ...

[base-jettyinclude]$ java -jar /path/to/jetty-distribution-9.2.7.v20150116/start.jar
2015-02-23 09:24:46.088:INFO::main: Logging initialized @290ms
2015-02-23 09:24:46.222:INFO:oejs.Server:main: jetty-9.2.7.v20150116

и запросите его через curl ...

$ curl http://localhost:9090/props/props/foo.jetty.dir
[foo.jetty.dir] = more of the same