Java Jetty用户定义配置

Java Jetty用户定义配置,java,servlets,jetty,Java,Servlets,Jetty,在我的应用程序中,我有一些参数(字符串),我想在不同的服务器之间进行更改 例如,其中一个参数是yes/no值,用于指示服务器是否为生产环境。另一个是运行应用程序的特定计算机中给定资源的文件路径。等等 我希望将这些值保存在Jetty web服务器目录结构中的单独配置文件(纯文本、xml、JSON或其他简单格式)中 有没有一种方法可以实现这一点,即允许在我的servlet中通过键简单地检索字符串值,而无需安装其他软件或配置复杂的Jetty选项?我真的很想避免只需要检索两三个值的复杂性 编辑: 我直接

在我的应用程序中,我有一些参数(字符串),我想在不同的服务器之间进行更改

例如,其中一个参数是yes/no值,用于指示服务器是否为生产环境。另一个是运行应用程序的特定计算机中给定资源的文件路径。等等

我希望将这些值保存在Jetty web服务器目录结构中的单独配置文件(纯文本、xml、JSON或其他简单格式)中

有没有一种方法可以实现这一点,即允许在我的servlet中通过键简单地检索字符串值,而无需安装其他软件或配置复杂的Jetty选项?我真的很想避免只需要检索两三个值的复杂性

编辑: 我直接使用servlets,没有任何额外的web框架,没有Spring,等等。软件是用Scala编码的

JNDI可能会做我需要的事情,但我想要一些更简单的设置


我想我正在寻找类似ServletConfig的东西,但是是在服务器级别,而不是web应用程序级别

在jetty分发目录中,您有一个
/resources/
目录(默认情况下,该目录通过
/start.ini
文件中的
选项
配置包含在服务器级类加载器中)

如果使用以下内容创建
/resources/myconfig.properties
(例如):

food=fruit
fruit.color=yellow
fruit.name=banana
然后您可以让Servlet在init()上加载它,如下所示:

public class LoadResourceServlet extends HttpServlet
{
    private Properties props;

    @Override
    public void init(ServletConfig config) throws ServletException
    {
        super.init(config);

        props = new Properties();
        URL url = this.getClass().getResource("/myconfig.properties");
        if (url != null)
        {
            try (InputStream stream = url.openStream())
            {
                props.load(stream);
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        resp.setContentType("text/plain");

        try (PrintWriter writer = resp.getWriter())
        {
            writer.printf("food = %s%n",props.getProperty("food"));
            writer.printf("fruit.color = %s%n",props.getProperty("fruit.color"));
            writer.printf("fruit.name = %s%n",props.getProperty("fruit.name"));
        }
    }
}

为什么不在每台服务器上用这些值定义环境变量呢;我是在OSX上开发的。我想要在所有环境中都保持一致,并且只需一个文件就可以轻松编辑。看起来很有趣!我可以在代码的其他部分使用getClass().getResource()(比如创建一些单例对象时),还是只在servlet
init()
上绑定到
/resources
文件?.getClass().getResource()是一个基本的类加载器概念。它只是从类加载器中的任何内容加载。在/resources/directory的情况下,由于start.ini中的选项行,我选择它作为目录类加载器引用。为了查看服务器类路径/classloader中的内容,请在发行版
java-jar start.jar--version
.FYI中使用此命令行,我选择使用一个属性文件,因为它已经烘焙到java中,并且使示例在没有额外第三方库的情况下工作。您可以使用任何想要的配置文件格式,只需从URL或InputStream加载即可。在上面的示例中,如果
url
为空,则意味着它找不到配置文件。(我想我可能在那里抛出了一个错误)