SpringBoot版本:2.7
application.yml:
urban:
cas:
ticket-url: http://${URBAN_CAS_TICKET_URL:10.64.9.33:8780}/cas
@Value("${urban.cas.ticket-url}")
private String ticketUrl;
环境变量中未设置URBAN_CAS_TICKET_URL属性时,打印结果如下:
http://10.64.9.33:8780/cas
但是,如果在环境变量中设置了 URBAN_CAS_TICKET_URL:
URBAN_CAS_TICKET_URL=127.0.0.1:8080
打印结果变为:
127.0.0.1:8080
这不是期望的结果,因为它丢失了开头的“http://”和结尾的“/cas”。
我想知道为什么它会丢失“http://”和“/cas”?或者我怎样才能避免这种损失?
在您的情况下,您将使用环境属性
urban.cas.ticket-url
完全覆盖属性 URBAN_CAS_TICKET_URL
。在 Spring 中,您可以使用下划线代替属性名称中的点和破折号,使这两个属性相同。
您应该考虑使用两个不同的名称(例如,
urban.cas.ticket-url
和urban.cas.host
)。这应该可以解决问题。
如果您使用环境变量而不是系统属性,大多数操作系统不允许使用句点分隔的键名称,但您可以使用下划线代替(例如,SPRING_CONFIG_NAME 而不是 spring.config.name)。有关详细信息,请参阅从环境变量绑定。