2017-08-14 26 views
1

ファイル読み取ります。私は、このソリューションが動作するように期待:How to load property file from classpath in AWS lambda javaAWSラムダJavaの私は、ファイルのプロパティからクラスにプロパティをロードしようとどのような特性が

私はいくつかの静的メソッドを持つクラスを持っていると私はコンフィグホルダーとして使用します。その中にはこの行があります。

final InputStream inputStream = 
Config.class.getClass().getResourceAsStream("/application-main.properties"); 

常にnullを返します。私はLambdaが使用しているzipパッケージをダウンロードし、ファイルはルートの中にあります。それにもかかわらず動作しません。

誰でも同様の問題がありましたか?

EDIT: 設定ファイルはここにある:

project 
└───src 
│ └───main 
│  └───resources 
│   application-main.properties 

はEDIT: 私の "一時的な" 問題を回避するには、以下のようになります。それはクラスパスから読み込む試験中

// LOAD PROPS FROM CLASSPATH... 
try (InputStream is = Config.class.getResourceAsStream(fileName)) { 
     PROPS.load(is); 
    } catch (IOException|NullPointerException exc) { 
     // ...OR FROM FILESYSTEM 
     File file = new File(fileName); 
     try (InputStream is = new FileInputStream(file)) { 
      PROPS.load(is); 
     } catch (IOException exc2) { 
      throw new RuntimeException("Could not read properties file."); 
     } 
    } 

、AWSラムダでの展開後ランタイムはファイルシステムを使用します。ファイルを識別するために、私はenv変数を使用しました:

fileName = System.getenv("LAMBDA_TASK_ROOT") + "/application-main.properties"; 

しかし、私はむしろこれを回避することなくクラスパスを使用したいと思います。

答えて

0

あなたは、以下のフォルダ構造を持っていると仮定しましょう:

project 
 
└───src 
 
│ └───main 
 
│  └───resources 
 
│   config.properties

そして、あなたのラムダハンドラ:

ClassLoader loader = Config.class.getClassLoader(); 
 
InputStream input = loader.getResourceAsStream("config.properties");

TあなたはプロパティはプロパティをロードするためにResourceBundleを使用することができますファイルをロードしたいと帽子は...

+0

は、あなたの答えをいただき、ありがとうございます。私はスラッシュ( "config.properties"と "/config.properties")の有無にかかわらず試しました。何も働かなかった。 – greg

0

を動作する可能性があります。

String version = ResourceBundle.getBundle("application-main").getString("version"); 

これは、InputStreamとしてファイルを読み込むのと同じではありませんが、これは私のために働いた。

私はgithub上のファイルのプロパティから現在のバージョンを読み込み、簡単なハローワールド・ラムダを持っています。

0

あなたはSRC /メイン/リソースパッケージ内の.propertiesファイルがある場合は、これを試してみてください。

protected static Properties readPropertiesFile() { 
    ClassLoader classLoader = Utils.class.getClassLoader(); 
    try { 
     InputStream is = classLoader.getResourceAsStream("PropertiesFile.properties"); 
     Properties prop = new Properties(); 
     prop.load(is); 
     return prop; 
    } catch (Exception e) { 
     return null; 
    } 
} 

あなたはこのようにそれを呼び出すことができます。

Properties _dbProperties = Utils.readPropertiesFile(); 
関連する問題