一尘不染

Tomcat 8-context.xml在数据源中使用环境变量

tomcat

我有一个使用数据源的Tomcat 8项目(请参见下文)

<Resource auth="Container" 
          name="jdbc/JtmDS"  
          driverClassName="org.apache.derby.jdbc.EmbeddedDriver" 
          type="javax.sql.DataSource" 
          username="xfer"
          password="xfer10" 
          url="jdbc:derby:/home/PUID/tm/control/JtmDB"                    
          initialSize="25"
          maxTotal="100" 
          maxIdle="30" 
          maxWaitMillis="10000"                                      
          removeAbandonedOnBorrow="true"
          removeAbandonedTimeout="20" />

这工作得很好。

但是,URL是硬编码的路径 /home/PUID/tm/control/JtmDB

当它投入生产时,路径的PUID部分将在众多系统中有所不同。我设置了一个环境变量export PUID=abcd
,其余的应用程序都可以使用System.getenv( )${env:PUID}适当的方法。

这些都工作正常。

我的问题非常简单:如何使context.xml中的PUID值成为可以从环境变量读取的变量?


阅读 686

收藏
2020-06-16

共1个答案

一尘不染

我终于发现了我实际上需要在这里做的事情……最终很简单。

我在运行时将Java参数传递给Tomcat,如下所示。

我添加了以下内容 setenv.sh

export PUID=abcd

JAVA_OPTS=-Dpuid=${PUID}

然后编辑我的context.xml,如下所示

<Resource auth="Container" 
          name="jdbc/JtmDS"  
          driverClassName="org.apache.derby.jdbc.EmbeddedDriver" 
          type="javax.sql.DataSource" 
          username="xfer"
          password="xfer10" 
          url="jdbc:derby:/home/${puid}/tm/control/JtmDB"                    
          initialSize="25"
          maxTotal="100" 
          maxIdle="30" 
          maxWaitMillis="10000"                                      
          removeAbandonedOnBorrow="true"
          removeAbandonedTimeout="20" />

因此,现在我的Tomcat安装将读取此内容,并且能够为每个不同的PUID使用不同的路径。

2020-06-16