Системные переменные среды в приложении 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