2016-07-10 19 views
0

開発環境で、HerokuのDATABASE_URLを使用してHerokuで動作するDATABASE_URLをロードする設定を設定しようとしています。残念ながら、ローカル環境変数を作成しようとしている技術のうち、Gradle/Boot/IntelliJ環境では動作しないようです。ここに私が試したものです:Spring Boot/Gradle/IntelliJ環境でJava環境変数を設定するにはどうすればよいですか?

  1. が追加export DATABASE_URL=jdbc:postgresql...(bootRun.systemProperties = System.propertiesと)私のGradleタスクVMオプションに-DDATABASEURL=jdbc:postgresql...以下
  2. 私のメイクシフト答え、I本当に追加
  3. /etc/environmentへ好きではない。

答えて

0

私は私が持っている最高の答えを自分の質問に答えるが、実際 1受け入れるためのより良いために願っています!

私の環境ごとに異なるプロパティファイルがあります。 development.propertiesで私は

localDatabaseUrl=postgres://postgres:[email protected]:5432/Nitro 

を追加しましたそして、私はDATABASE_URL環境変数が見つからなかった場合は、その後、私はプロパティから1をファイルすることをお読みください。

@Configuration 
public class DatabaseConfig { 

    @Value("${localDatabaseUrl}") 
    String localDatabaseUrl; 

    private static final Logger log = LoggerFactory.getLogger(DatabaseConfig.class); 

    @Bean 
    public BasicDataSource dataSource() throws URISyntaxException { 

     URI dbUri; 
     try { 
      dbUri = new URI(System.getenv("DATABASE_URL")); 
      log.info("Connecting via DATABASE_URL environment variable"); 
     } catch (NullPointerException ex) { 
      dbUri = new URI(localDatabaseUrl); 
      log.info("Connecting via localDatabaseUrl properties key/value ***"); 
     } 

     String username = dbUri.getUserInfo().split(":")[0]; 
     String password = dbUri.getUserInfo().split(":")[1]; 
     String dbUrl = "jdbc:postgresql://" + dbUri.getHost() + ':' + dbUri.getPort() + dbUri.getPath(); 

     BasicDataSource basicDataSource = new BasicDataSource(); 
     basicDataSource.setUrl(dbUrl); 
     basicDataSource.setUsername(username); 
     basicDataSource.setPassword(password); 

     return basicDataSource; 
    } 

} 
0

まず第一に、あなたが使用して好むかもしれませんHeroku DevCenterに記載されているようなJDBC_DATABASE_URLである。

しかし、どちらの変数も問題ありません。私はまた、フォールバックロジックも良いと思う。しかし、私はおそらく、このようにそれを行うだろう:

if (null == System.getenv("JDBC_DATABASE_URL")) { 
    dbUri = new URI(System.getenv("JDBC_DATABASE_URL")); 
} else { 
    dbUri = new URI(localDatabaseUrl); 
} 

別のアプローチは、.envファイルとheroku localコマンドを使用することです。あなたの.envファイルが含まれます

JDBC_DATABASE_URL=postgres://... 

heroku localコマンドは、アプリケーションを実行するために、あなたのProcfileでコマンドを使用します。しかし、これは./gradlew bootRunと他のそのようなタスクを使用するときは役に立ちません。

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

+0

ありがとう@codefinger。私は、Ubuntu上でJavaが読むことができる環境変数を作成するにはまだ良い方法があることを知っています。ただそれを待っている。 – Spider

0

まず、春には第二に、(同じ非ブートプロジェクトのためにも当てはまるはずですが春ブーツドキュメントのページです)、ここで定義された順序に従って変数を解決します、自動的に環境変数を解決することができますその後、プロパティでバージョンを上書きしますHerokuのでenvironemtのVARSのような変数を設定

が必要な任意のさらなるコーディングせずに、ファイル:

//these properties will be resolved automatically from Heroku env vars if present 
    //otherwise will be resolved from properties file bundled in the WAR 
    @Value("${database.url}") 
    String databaseUrl; 

    @Value("${database.user}") 
    String databaseUser; 

    @Value("${database.password}") 
    String databasePassword; 

    @Bean 
    public BasicDataSource dataSource() throws URISyntaxException { 

     BasicDataSource basicDataSource = new BasicDataSource(); 
     basicDataSource.setUrl(databaseUrl); 
     basicDataSource.setUsername(databaseUser); 
     basicDataSource.setPassword(databasePassword); 

     return basicDataSource; 
    } 
} 

はあなたからVARSを追加します。ローカルのプロパティは、あなたには、いくつかの手段で、アプリのHerokuの設定に上書きしたいというファイル:

enter image description here

関連する問題