Java 在tomcat应用程序部署期间获取主机名

Java 在tomcat应用程序部署期间获取主机名,java,spring,tomcat,environment-variables,hostname,Java,Spring,Tomcat,Environment Variables,Hostname,我的任务是在Spring数据库配置中使用主机名 例如,当在localhost db上部署应用程序时,请求在localhost:5432/数据库上发送,或者在(例如)172.18.0.2:5432/数据库上发送 我正试图使用Spring SpEL实现此目的: <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" p:driverClassName="org.postgresql.Dr

我的任务是在Spring数据库配置中使用主机名

例如,当在localhost db上部署应用程序时,请求在localhost:5432/数据库上发送,或者在(例如)172.18.0.2:5432/数据库上发送

我正试图使用Spring SpEL实现此目的:

 <bean id="dataSource"
      class="org.apache.tomcat.jdbc.pool.DataSource"
      p:driverClassName="org.postgresql.Driver"
      p:url="#{'jdbc:postgresql://' + @bUrl.getHost=='localhost'?'localhost':'172.18.0.2' + ':5432/infostock'}"
       />

在这个表达式中,我需要识别bUrl。它必须包含有关主机名的信息

但我如何才能获得这些信息:

 <bean class="java.net.URI" id="bUrl">
    <constructor-arg value="${???????}"/>
</bean>

是否存在特殊变量


我试图从HttpServletRequest获取主机名,但问题是应用程序在部署阶段后能够填充请求。

要求动态获取主机名或从属性文件读取?动态-取决于主机名(localhost或其他),我不知道如何动态执行。另一种方法是定义与两个概要文件(比如dev和prod)关联的两个
数据源
bean,并使用命令行参数(例如,
-Dspring.profiles.active=“dev”