2017-04-24 8 views
0

私は、宛先にハードコードされたURLを返す関数を持っています。 manifest.ymlファイルでリンク先URLを定義し、そこからURLを読みたいと思います。ここでSpringブートアプリケーションで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

はちょうどライン' bpmrulesrepositoryを追加することはできません ? CFは、そのjsonを環境内の名前/値のペアに分割する方法を知りません。 –

答えて

0

manifest.ymlファイルは、cf cliにアプリケーションの配備方法を指示します。ここに設定することができますが、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"}] 

次の2つの環境変数を定義するには、CF CLIを言っている:

は例えば、これはあなたのmanifest.ymlファイルである場合は、値を持っているとしている

  1. TARGET_RUNTIMEtomcat
  2. destinationsこれは値を持つ予定です[ {"name":"bpmrulesrepository", "url":"https://example.com"}]

urlキーを取得する場合は、最初にdestinationsのenv変数の内容を取得し、解析してください(JSONのように見えます)。urlの値を読み取る必要があります。

Scottさんが彼のコメントで述べたように、環境変数をアプリケーションで読みやすくするために、環境変数を定義することで自分の仕事を節約することができます。たとえば、destinations_bpmrulesrepository_urlhttps://example.comに設定すると、env変数を1つ読み込むだけでURLを取得できます。

application.propertiesまたはapplication.ymlの内部に設定することもできます。あなたはSpringBootアプリケーションを持っているので、これは典型的にあなたの設定が行く場所です。さらに、Springブートなので、必要に応じて、環境変数を介してこれらのファイルから簡単に設定を上書きすることができます。します。https:// example.com`代わりに `destinations`ラインの

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

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


} 

そこから環境ビーンを注入することができます。

@Autowired 
public Environment environment; 

注入されたBeanから、このような定義済みプロパティを参照できます。 environment.getProperty( "thePropertyKey");

+1

manifest.ymlファイルは、アプリケーションがCloud Foundryにプッシュされたときに 'cf' CLIによって使用されます。このファイルはアプリケーションと共にデプロイされないため、実行時にその内容を読み取ることはできません。したがって、この解決法は機能しません。 –

関連する問題