我有一个函数可以将硬编码的URL返回到目标。我想在manifest.yml
文件中定义目标网址,并从那里读取网址。
这是我的manifest.yml
:
applications:
- name: rule_runtime
buildpack: java_buildpack
path: target/com.sap.brms.web.app.0.0.1-SNAPSHOT.war
env:
TARGET_RUNTIME: tomcat
destinations: [ {"name":"bpmrulesrepository", "url":"https://example.com"}]
从这个文件中,我想在启动应用程序时获得值https://example.com
。我一直在尝试System.getenv("bpmrulesrepository")
,但它正在返回null
。
答案 0 :(得分:0)
您的manifest.yml
文件告诉cf cli如何部署您的应用程序。您可以在此处输入配置,但仅,因为您的manifest.yml
文件可用于定义环境变量。换句话说,您的manifest.yml
文件可用于设置特定的环境变量,您的应用程序稍后可以从中读取配置值。您的申请无法直接阅读manifest.yml
。
例如,如果这是您的manifest.yml
文件:
applications:
- name: rule_runtime
buildpack: java_buildpack
path: target/com.sap.brms.web.app.0.0.1-SNAPSHOT.war
env:
TARGET_RUNTIME: tomcat
destinations: [ {"name":"bpmrulesrepository", "url":"https://example.com"}]
然后你告诉cf cli定义两个环境变量:
TARGET_RUNTIME
,其值为tomcat
destinations
,其值为[ {"name":"bpmrulesrepository", "url":"https://example.com"}]
因此,如果你想获得url
密钥,你需要首先获取destinations
env变量的内容,解析它(看起来像JSON),然后读取{的值{1}}。
正如斯科特在上面的评论中提到的,您可以通过定义环境变量来节省一些工作,以便应用程序更容易阅读它们。例如,如果您将url
设置为destinations_bpmrulesrepository_url
,那么您需要做的就是阅读一个env变量并获得您的网址。
对于它的价值,您可能还想将配置放在https://example.com
或application.properties
内。你有一个Spring Boot应用程序,所以这通常是你的配置。另外,因为它是Spring Boot,所以如有必要,您可以通过环境变量轻松覆盖这些文件中的配置设置。
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
答案 1 :(得分:-1)
您需要引用yaml文件。 您应该在Spring启动应用程序中添加此配置类。
package xyx.partas.provider.lezzgoshop.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.FileSystemResource;
import java.io.File;
/**
* Created by afernandez on 16/09/2016.
*/
@Configuration
@Slf4j
public class AppConfig {
private static String YML_FILE = "manifest.yml";
//Change the path
public static final String DEFAULT_ETC_DIR = "/etc/partas-config";
/**
* The default etc directory can be overridden by setting the CORE_API_ETC environment variable.
*/
public static final String CUSTOM_ETC_DIR_VAR = "CORE_API_ETC";
@Bean
public static PropertySourcesPlaceholderConfigurer properties() {
final String envEtcDir = System.getenv(CUSTOM_ETC_DIR_VAR);
final String configDir = (envEtcDir == null) ? DEFAULT_ETC_DIR : envEtcDir;
final String configFile = configDir + File.separatorChar + YML_FILE;
log.info("Looking up configuration file: {}", configFile);
File ymlFile = new File(configFile);
PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
if (ymlFile.exists()) {
log.info("Loading Configuration File: {}", ymlFile.getAbsoluteFile());
yaml.setResources(new FileSystemResource(configFile));
propertySourcesPlaceholderConfigurer.setProperties(yaml.getObject());
} else {
log.info("Using project default Configuration File");
//yaml.setResources(new ClassPathResource("application-default.yml"));
// propertySourcesPlaceholderConfigurer.setProperties(yaml.getObject());
}
return propertySourcesPlaceholderConfigurer;
}
}
从那里,您可以注入环境Bean。
@Autowired
public Environment environment;
从注入的bean中,您可以像这样引用已定义的属性。 environment.getProperty( “thePropertyKey”);