热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Jetty应用程序中的系统环境变量

如何解决《Jetty应用程序中的系统环境变量》经验,为你挑选了1个好方法。

如何在一个Jetty应用程序中配置系统环境变量?

例如,对于数据库连接细节,将其放入文件并将其检入cvs是个坏主意.因此,使用系统环境是一种可行的方法.虽然系统环境变量是在/etc/environments文件或.bashrc/.zshrc文件中定义的,但在Jetty应用程序中,执行操作System.getenv("variable_name")不会提供任何内容.它将导致null.

我已经读过这个问题:使用env变量配置一个Jetty应用程序,它结束了告诉Jetty不支持System.getenv()甚至不支持start.ini文件的内容.

和ubuntu 12.10上的jetty和etc环境一样In the jetty.sh script you can source the /etc/environment file and they will be present.,我说我试过并没有得到预期的值,这意味着它只给了我null.

如果我不能使用默认System.getenv()或任何.ini文件,那么如何指定数据库连接等凭据?



1> Joakim Erdfe..:

不支持System.getenv()不是Jetty的东西,而是Java的东西.

围绕着System.getenv()你的环境有很多限制,除了最天真和最基本的测试用例之外,几乎没有任何限制.(例如:不支持多行值.多行条目可能会破坏解析.不支持没有值的键.在解析过程中,没有值的键通常会与下一个键合并.不支持非US-ASCII字符的条目.具有控制字符的条目是不支持.)

将系统环境变量与Java程序一起使用时的常用技术是使用特定于shell的技术来获取值并将它们注入命令行,或者将其注入到Jetty的ini文件格式中,然后再使用.

根据您的技术,这些值将显示为Jetty属性,或显示为Java系统属性.

刚刚创建了一个项目来演示4种实现此目的的方法

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

Jetty的外部配置属性

演示如何配置Jetty中的Servlet可以访问的简单属性.

此演示显示了在运行时配置属性的4种不同方法,然后可以由Jetty中运行的Servlet读取.

props.war

这是一个带有单个HttpServlet和WEB-INF/web.xml的简单war文件

[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.

只需编译顶层,war文件将被构建并放置在该项目的所有demo jetty.base位置.

示例#1:基本命令行

/base-command-line项目包含一个简单的start.ini,它在端口9090上启动jetty,并部署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或的工具测试servlet中的属性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 http://localhost:9090/props/props/foo
[foo] = bar

这演示了通过命令行指定的属性的访问,现在让我们看看其他选择.

示例#2:使用start.ini

/base-startini项目包含一个简单的start.ini,它在端口9090上启动jetty,并部署webapp.

start.ini也包含一个foo.ish属性.

让我们启动Jetty并再次尝试我们的道具servlet访问...

[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 http://localhost:9090/props/props/foo.ish
[foo.ish] = bar

示例#3:使用start.d可选的ini

/base-startd项目包含一个简单的start.ini,它在端口9090上启动jetty,并部署webapp.

start.ini也不包含我们感兴趣的额外属性.

start.d/myconf.ini包含一个名为属性foo.d,我们感兴趣的内容.

让我们启动Jetty并再次尝试我们的道具servlet访问...

[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 http://localhost:9090/props/props/foo.d
[foo.d] = over here

示例#4:使用--include-jetty-dir可选配置

/base-jettyinclude项目包含一个新的start.ini,它在端口9090上启动jetty,并部署webapp.

start.ini也不包含我们感兴趣的额外属性.

但是,start.ini使用--include-jetty-dir=../jettydir指向全新的interrim jetty.base配置源的可选配置.

../jettydir/start.ini包含一个名为属性foo.jetty.dir,我们感兴趣的内容.

让我们启动Jetty并再次尝试我们的道具servlet访问...

[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 http://localhost:9090/props/props/foo.jetty.dir
[foo.jetty.dir] = more of the same


推荐阅读
author-avatar
回__复卷轴
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有