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

时间:2017-06-26 14:17:48

标签: 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" />

这非常有效。

然而,网址是硬编码路径/home/PUID/tm/control/JtmDB

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

这些都很好。

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

1 个答案:

答案 0 :(得分:5)

我终于发现了我在这里需要做的事情......最后非常简单。

我在运行时将一个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使用不同的路径。