У меня есть функция, которая возвращает жестко закодированный URL к месту назначения. Я хочу определить целевой 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
anmol kang 24 Апр 2017 в 13:28

2 ответа

Лучший ответ

Ваш 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 определить две переменные окружения:

  1. TARGET_RUNTIME который будет иметь значение tomcat
  2. destinations который будет иметь значение [ {"name":"bpmrulesrepository", "url":"https://example.com"}]

Таким образом, если вы хотите получить ключ url, вам нужно сначала получить содержимое переменной env destinations, проанализировать ее (выглядит как JSON), а затем прочитать значение {{X2} } .

Как Скотт упомянул в своем комментарии выше, вы можете сэкономить некоторую работу, определив переменные среды, чтобы их было легче читать в вашем приложении. Например, если вы установите для destinations_bpmrulesrepository_url значение https://example.com, все, что вам нужно сделать, - это прочитать одну переменную env, и у вас будет свой URL.

Что бы это ни стоило, вы также можете просто поместить свою конфигурацию в application.properties или application.yml. У вас есть приложение Spring Boot, так что это, как правило, туда, где ваша конфигурация будет идти. Кроме того, поскольку это Spring Boot, вы можете легко переопределить параметры конфигурации из этих файлов через переменные среды, если это необходимо.

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

0
Daniel Mikusa 25 Апр 2017 в 11:51

Вам нужно сослаться на файл yaml. Вы должны добавить этот класс конфигурации в ваше приложение весенней загрузки.

 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;
    }


}

Оттуда вы можете ввести компонент EJB.

 @Autowired
 public Environment environment;

Из внедренного компонента вы можете ссылаться на определенное свойство следующим образом. environment.getProperty ( " thePropertyKey " ) ;

-1
Alex Fernandez 24 Апр 2017 в 11:39
43585687