Tomcat 8 - context.xml在Datasource中使用环境变量

tho*_*nor 10 java tomcat environment-variables context.xml

我有一个使用数据源的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" />
Run Code Online (Sandbox Code Playgroud)

这非常有效.

但是url是一个硬编码的路径 /home/PUID/tm/control/JtmDB

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

一切都很好.

我的问题很简单:如何在context.xml中创建一个可以从环境变量中读取的变量?

tho*_*nor 9

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

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

我添加了以下内容 setenv.sh

export PUID=abcd

JAVA_OPTS=-Dpuid=${PUID} 
Run Code Online (Sandbox Code Playgroud)

然后编辑我的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" />
Run Code Online (Sandbox Code Playgroud)

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