2017-01-03 41 views
1

私は春のブートに慣れていないので、基本的なエラーがあります。明らかに間違いがあります。しかし、私はRTM'edやドキュメントをしましたし、ポイントが不足しています:SPRING_APPLICATION_JSON環境変数が春のブートで認識されない

TL/DR

どのように私は、「春の環境」から値を取得するために@valueアノテーションを使用することができますか?

コンテキスト

私はをシーク:

  • 合格アプリケーション/ "春の環境" と 'JDBC情報'(例えば、URL /パスワード/ログイン)を使用して、環境変数SPRING_APPLICATION_JSON
  • jdbc jndiのURL/creds/etcを設定するには、アプリケーションの 'post process context'でこのjdbc情報を使用してください。
:私は環境変数SPRING_APPLICATION_JSONを設定しましたが、春ブーツが

例 "それを拾う" ように見えない

プログラムを呼び出すと、これらの両方が失敗した10 問題

  • SPRING_APPLICATION_JSON='{"spring": {"datasource": { "url":"jdbc:mysql://localhost:3306/myapp", "username":"myappuser", "password":"mypassword" } } }' java -jar build/libs/myapp_springboot.war 
    

    および私は "PropertySourceのものを" 持っていなかった

    @Component 
    public class DbInfo 
    { 
        @Value("${spring.datasource.url}") 
        String fUrl; 
    

    注:

    -Dspring.application.json='{"spring": {"datasource": { "url":"jdbc:mysql://localhost:3306/myapp", "username":"myappuser", "password":"mypassword" } } }' java -jar build/libs/myapp_springboot.war 
    

    使用例

    は、ここでアクセスしようとしたクラスです。私は当初、それを無料で得ると思っていました。

    エラー

    は、「文字列値 に$ {spring.datasourceをプレースホルダ 'spring.datasource.url' を解決できませんでした。URL}」

    も試みこの

    私はこれを試してみました:

    @Configuration 
    @PropertySource({ 
         "classpath:application.properties", 
    }) 
    public class MyDbInfo 
    { 
    
        @Autowired 
        Environment fEnvironment; 
    

    環境

    springBootVersion = '1.4.2.RELEASE' 
    

    リファレンス

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

    事前

+0

これを試してみてください[http://stackoverflow.com/a/20045582/ 3710490](http://stackoverflow.com/a/20045582/3710490) – Valijon

答えて

1

のおかげでは、これが私の作品:

@Value("#{environment['spring.datasource.url']}") 
private String url; 
0

究極の答えは、 "春のJDBCテンプレート" に "JNDIベースのDB接続" から切り替えるようにしました。それから、spring-jdbcはSPRING_APPLICATION_JSONの設定を自動的に取得しました。

ただし、このスイッチを切り替える前に、以下のコードで問題が解決しました。おそらくあまり冗長な方法はありません。

DBコネクション構成クラス

@Configuration 
@PropertySource({ 
     "classpath:application.properties", 
}) 
public class DbConnectionInfo 
{ 
/** 
* Db connection info 
*/ 
@Configuration 
@PropertySource({ 
     "classpath:application.properties", 
}) 
public class DbConnectionInfo 
{ 

    private Environment fEnvironment; 

    @Autowired 
    public DbConnectionInfo(Environment pEnvironment) 
    { 
     fEnvironment = pEnvironment; 
    } 

    public String getUrl() 
    { 
     return fEnvironment.getProperty("spring.datasource.url"); 
    } 

Applicationクラスこのとともに

@SpringBootApplication 
public class Application { 

    /** 
    * Db connection info 
    */ 
    private DbConnectionInfo fDbInfo; 


    /** 
    * Constructor. Mark as autowired so spring injects DbInfo 
    * @param pDbConnectionInfo 
    */ 
    @Autowired 
    public Application(DbConnectionInfo pDbConnectionInfo) 
    { 
     fDbInfo= pDbConnectionInfo; 
    } 
関連する問題