我有一个使用数据源的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
/home/PUID/tm/control/JtmDB
当它投入生产时,路径的PUID部分将在众多系统中有所不同。我设置了一个环境变量export PUID=abcd ,其余的应用程序都可以使用System.getenv( )或${env:PUID}适当的方法。
export PUID=abcd
System.getenv( )
${env:PUID}
这些都工作正常。
我的问题非常简单:如何使context.xml中的PUID值成为可以从环境变量读取的变量?
我终于发现了我实际上需要在这里做的事情……最终很简单。
我在运行时将Java参数传递给Tomcat,如下所示。
我添加了以下内容 setenv.sh
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使用不同的路径。