2016-04-24 9 views
1

こんにちは私は一般的にMavenを使い慣れていないので、間違っていたら事前にお詫びしたいと思います。SpringでMavenプロパティにアクセスできない

私はMySQLデータベースにアクセスする春のMavenプロジェクトを持っています。
多くの場合、MySQLデータベースにアクセスできないため、テスト用にローカルデータベースを使用します。アクティブなプロファイルを変更して2つのデータベースを交換します。

私は私のpom.xmlでこれを置くことによってプロファイルを設定:

<profiles> 
     <profile> 
      <id>Local</id> 
      <dependencies> 
       <dependency> 
        <groupId>org.hsqldb</groupId> 
        <artifactId>hsqldb</artifactId> 
        <version>2.3.3</version> 
        <classifier>jdk5</classifier> 
       </dependency> 
      </dependencies> 
      <properties> 
       <jdbc.url>jdbc:hsqldb:file:databaseName</jdbc.url> 
       <jdbc.username>a</jdbc.username> 
       <jdbc.password></jdbc.password> 
       <jdbc.driver>org.hsqldb.jdbcDriver</jdbc.driver> 
      </properties> 
     </profile> 
     <profile> 
      <id>MySQL</id> 
      <dependencies> 
       <dependency> 
        <groupId>mysql</groupId> 
        <artifactId>mysql-connector-java</artifactId> 
        <version>5.1.38</version> 
       </dependency> 
      </dependencies> 
      <properties> 
       <jdbc.url>jdbc:mysql://mysql.website.ac.uk:3306</jdbc.url> 
       <jdbc.username>user</jdbc.username> 
       <jdbc.password>1234</jdbc.password> 
       <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver> 
      </properties> 
     </profile> 
    </profiles> 

私は、彼らが実際の値に変換されない例$ {jdbc.url}のプロパティに変数を介してアクセスしてみてください

プロファイルに定義されているように、私はエラーが発生します。私はそれがSpring Bootと何か関係があるかもしれないと思う。

+0

デバッグログと詳細ログを有効にして、何が起きているのかを確認しようとしましたか? – randominstanceOfLivingThing

+0

あなたの質問には関係ありませんが、pom.xmlにデータベースプロパティを設定することは悪い考えです。 Github、bitbucketなどの外部VCSにコードを保存していますか? – Everv0id

+0

POM – Priyamal

答えて

0

プロファイルでプロパティを指定したため、回避策があります。 @Value("${name}")などの注釈は、外部化された構成を参照しています。 application.ymlから。このファイルを使用して、必要なプロパティをロードする必要があります。 @[email protected]はあなたのMavenプロファイルからプロパティを読み込みます。

jdbc: 
    url: @[email protected] 
    username: @[email protected] 
and so on... 

これらのプロパティは、コードでアクセスできます。

+0

私は本当に申し訳ありませんが、私は本当にこれのすべてに新しいです。私はあなたの答えをよく理解していません。すべての$([name])を@ [name] @に置き換えるだけでしたか? – sf298

+1

いいえ、この場合、あなたのリソースにファイル 'application.yml'を提供する必要があります。次に、mavenはあなたのプロフィールからこのファイルに値を挿入し、このファイルによってコード内でアクセス可能になります。参照してください: [Springブートの外部化された構成](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html) –

+0

これは、働いている!!!!どうもありがとうございました! – sf298

2

特定のsprint-bootの問題以外にも、maven resource filteringの設定がありません。

Mavenプロパティは、Springで管理する必要がある別のプロパティファイル(通常はPropertyPlaceholderConfigurer)に格納しない限り、自動的にSpringに伝播されません。

しかし、Mavenのフィルタリングなしでは、ツアーのsrc /資源の下で多くのアイテムを持っていない通常ならば、プロパティが自動的に解決されていないオンにあなただけの

<resource> 
    <directory>src/main/resources</directory> 
    <filtering>true</filtering> 
</resource> 

でグローバルフィルタを有効にすることができ、あなたのプロパティファイルを置き換える必要があるフォルダMaven値を持つプレースホルダ。

あなたはSRC /メイン/リソースに複数のリソースを持っているに他の一方で、あなたはbinary files破損

を避けるために、より深くドキュメントをチェックする必要があり、場合私は春のブーツは、単にで自動的にすべてのプロセスをラップしていると思いますアプリケーションのプロパティファイル。

+0

私は残念、それはちょうどスニペットではありませんでした! – sf298

+0

あなたは私の一日を保存しました) – MeetJoeBlack

関連する問題