首页 > 解决方案 > SpEL Spring中的三元运算符

问题描述

我有以下表达式:

 <bean class="java.net.InetAddress" id="inetAddress" />

<bean id="dataSource"
      class="org.apache.tomcat.jdbc.pool.DataSource"
      p:driverClassName="org.postgresql.Driver"
      p:url="#{'jdbc:postgresql://' + inetAddress.getLocalHost().getHostName()=='alex-HP-290-G1-SFF-Business-PC'?'localhost':'172.18.0.2' + ':5432/infostock'}"/>

这个表达

 inetAddress.getLocalHost().getHostName()=='alex-HP-290-G1-SFF-Business-PC'?'localhost':'172.18.0.2'

必须将主机名值(从 getHostName 检索)与“alex-HP-290-G1-SFF-Business-PC”进行比较。如果为真,则返回“localhost”,否则返回“172.18.0.2”。

主机名的实际值为“alex-HP-290-G1-SFF-Business-PC”。我从:

 System.out.println(InetAddress.getLocalHost().getHostName());

所以,三元运算符必须返回 'localhost'

但它返回“172.18.0.2”。

标签: javaspringhostnameconditional-operatorspring-el

解决方案


我找到了这个解决方案:

    p:url="#{inetAddress.getLocalHost().getHostName().equals('andrej-HP-290-G1-SFF-Business-PC')?'jdbc:postgresql://localhost:5432/infostock':'jdbc:postgresql://172.18.0.2:5432/infostock'}"

但它太长了,我想,它不是最佳的


推荐阅读