我将 Spring Cloud 配置服务器部署在 PCF 服务器中(我的应用程序与配置服务器绑定)。我需要将所有常见配置移至单独的 .yml (import.yml) 文件并将其导入主配置文件中。当我尝试从邮递员测试配置服务器端点时,我能够从配置服务器看到所有字段(主要字段和导入字段)。但在控制器中我只能看到主配置文件中的字段。如果我尝试从 import.yml 文件中获取字段,则会得到 null。为什么它在邮递员中工作但在我的控制器类上不起作用?
application.yml
my:
lastname: "Ramanathan"
spring:
config:
import: import.yml
导入.yml
my:
firstname: "Thiagarajan"
邮递员
my:
lastname: Ramanathan
firstname: Thiagarajan
MyController.java
@Value("${my.fistname:firstname not available}")
private String firstname;
@Value("${my.lastname:lastname not available}")
private String lastname;
public String somemethod()
{
log.error("firstname:" +firstname);
log.error("lastname:" +lastname);
log.error("env firstname:" +environment.getProperty("my.fistname"));
log.error("env lastname:" +environment.getProperty("my.lastname"));
}
输出:
firstname: firstname not available
lastname: Ramanathan
env firstname: null
env lastname: Ramanathan
你可以这样做。
首先在 application.yml 中创建您的 Config Server 配置。例如:
spring:
application:
name: config-server
profiles:
active: native
server:
port: 8888
---
spring:
config:
activate:
on-cloud-platform: none
cloud:
config:
server:
native:
search-locations: classpath:/configurations-local
---
spring:
config:
activate:
on-cloud-platform: cloudfoundry
cloud:
config:
server:
native:
search-locations: classpath:/configurations-cloudfoundry
如果您也喜欢在本地测试您的服务器,则可以这样做。另外,根据您的要求,您需要指定配置的存储位置、本机位置或某个外部位置。
接下来,在本例中,创建文件夹configurations-local和configurations-cloudfoundry。现在,在其中再次为所有常见配置创建 application.yml。例如:
management:
endpoints:
web:
exposure:
include: health,info,metrics
endpoint:
health:
probes:
enabled: true
然后根据服务名称创建其他不常用配置的yml文件,例如myservice.yml yml 的名称取决于应用程序名称,spring 会自动将 application.yml 和 myservice.yml 绑定到您的服务。
在您的服务中,您需要在 application.yml 中添加类似的内容。
spring:
application:
name: myservice
---
spring:
config:
activate:
on-cloud-platform: none
import: optional:configserver:http://localhost:8888
---
spring:
config:
activate:
on-cloud-platform: cloudfoundry
import: optional:configserver:http://config-server:8888
因此名称必须与配置服务器中的非常见 yml 匹配,并且您需要指定导入到您的配置服务器。
希望这有帮助。