【问题标题】:Tomcat:How can I configure server.xml dynamically?Tomcat:如何动态配置 server.xml?
【发布时间】:2012-03-18 19:41:19
【问题描述】:

我想使用 Tomcat 的连接池(使用嵌入式数据库 H2)但我想在运行时解析 url,即放置数据库的路径 以相对的方式。
问题是我不能硬编码 tomcat 的路径(即使使用像 ..\webapps 这样的相对路径)
因为

  1. 不知道安装在哪里
  2. Tomcat 的启动脚本将从 init.d 脚本开始,因此 ..\webapps 之类的东西不起作用。
  3. 我还发现我不能把环境变量放进去 server.xml

解决此问题的标准/最佳方法是什么?

【问题讨论】:

    标签: java linux web-applications tomcat jndi


    【解决方案1】:

    我假设您使用的是 Hypersonic 或 SQLLite 等数据库,您需要一个文件路径。

    您应该将数据库放在 CLASSPATH 中(例如 WAR 的 WEB-INF/classes)。使用类路径资源阅读器而不是绝对文件路径来访问它。它将使您的应用程序更便携,并且无需使用 Tomcat 进行这些恶作剧。

    【讨论】:

    • +1:你说得对,我正在使用H2。但这有什么帮助?我的意思是我需要一个url 来定义JNDI 中的JNDI 资源,对吗?所以如果我把它放在类路径中,这将如何工作?
    • 这个我没有发言权,必须是基于文件的。所以没有办法在server.xml中动态配置路径吗?
    • 我看到它添加到链接中的 context.xml 中,但它是一个绝对的 Unix 路径:groups.google.com/group/h2-database/msg/c56a8470f08289f2?pli=1
    • 不,你不会。在 context.xml 中设置 JNDI 连接池;您不需要编辑 server.xml。并且将真正的共享数据库作为服务器运行,无需安装任何东西。这个问题每天都被解决了很多次。你不是第一个。
    • (叹气) Context.xml 使之成为可能,无需编辑 server.xml。是的,您需要一个 URL。是的,您需要一个独立于在服务器模式下运行的 Web 应用程序的数据库。
    【解决方案2】:

    在您的 context.xml 中添加一个自定义资源,其中包含您定义的对象工厂。让该工厂创建连接并将其返回。

    【讨论】:

    • 如何实现我的自定义Object Factory?你有参考可以给我学习吗?
    • @Jim 查看 Tomcat server.xml/Resource 文档。那里有一篇关于自定义资源的文章。对象工厂是javax.naming.spi.ObjectFactory 的一个实例。
    猜你喜欢
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2016-12-28
    • 2017-02-28
    • 1970-01-01
    • 2021-03-03
    相关资源
    最近更新 更多