2016-04-17 5 views
1

私はSpring JPAを使用してPCF上で動作する小さなAPIを持っています。もちろん、コード内では、準備されたステートメントを実行しているJDBC接続を使用して、バインドされたMySQLインスタンスにアクセスできます。これを行うには、Javaを使用してデータベースに接続する際の通常の標準に従って、ユーザー名とパスワードが必要です。Pivotal Cloud FoundryのSpring JPAは、バインドされたMySQLインスタンスへの接続方法をどのように知っていますか?

しかし、Spring JPAでは、これを行う必要はありません。私は単純にMySQLインスタンスをバインドし、JPA APIを使用してクエリを実行できます。

もっと良い質問がないので、この魔法は何ですか?

+0

私は、フードの下では同じJDBC手順がまだ行われていると仮定しますが、Springはそれらを抽象化してあなたのために取り除いていると仮定します。 –

+0

私は同じと思います。私の質問は、このJDBC接続がデータベースのユーザー名とパスワードをどのように知っているかの線に沿っています。私はそれがインスタンスがPCFのアプリケーションに「束縛されている」という事実と関係していると推測していますが、PCFには新しく、この仕組みがわかりません。 –

答えて

2

CloudfoundrySpring Cloudは、12-factor appのパターンスルーである。

構成の場合は、config pattern suggested by 12-factor appパターンも使用します。

このパターンによれば、環境内のコード外のプロパティをenvironment variablesとして格納する必要があります。そのため、アプリケーションバンドルは、変更を加えずにビルドされると、どの環境にも展開できます。環境変数から設定を取得するので、異なる環境では異なる環境変数を定義する必要があります。

cf bind-serviceを使用してアプリケーションにサービスを追加するたびに、Cloudfoundryはそのサービスに関連する事前定義された環境変数を仮想マシン(またはコンテナなど)に設定します。あなたはcf env app-nameを使用して、これらの環境変数を確認することができます

。(Command Refeferencecf env app-name

{ 
"VCAP_APPLICATION": { 
    "application_id": "fa05c1a9-0fc1-4fbd-bae1-139850dec7a3", 
    "application_name": "my-app", 
    "application_uris": [ 
    "my-app.10.244.0.34.xip.io" 
    ], 
    "application_version": "fb8fbcc6-8d58-479e-bcc7-3b4ce5a7f0ca", 
    "limits": { 
    "disk": 1024, 
    "fds": 16384, 
    "mem": 256 
    }, 
    "name": "my-app", 
    "space_id": "06450c72-4669-4dc6-8096-45f9777db68a", 
    "space_name": "my-space", 
    "uris": [ 
    "my-app.10.244.0.34.xip.io" 
    ], 
    "users": null, 
    "version": "fb8fbcc6-8d58-479e-bcc7-3b4ce5a7f0ca" 
} 

サンプル出力をspring actuator endpointsを使用して、あなたは/envエンドポイントを使用して、すべての環境変数を検査することができます。それはcf envより多くのプロパティをリストします。メモリデータソース依存性

ばね

  1. cloud profileがアクティブであることを検出する(spring cloudspring.profiles.active環境プロパティ、またはspring.profileプロパティによって設定される)
  2. Auto Configuration
  3. @SpringBootApplicationによってイネーブル)が有効になっているNOでありますクラスパス上に存在する(ただし、メモリ依存関係が存在していても、クラウドデータソース設定の優先順位を与えると仮定している)
  4. ませデータソースを明示的に

春は(Postgresのような)データソースサービスがアプリケーションにバインドされている場合は、環境変数を使用してデータソース豆自体を作成するように構成されていません。

以下は、データソースの作成に使用する環境プロパティのリンクです。ここで

https://docs.cloudfoundry.org/buildpacks/java/spring-service-bindings.html

データソースのみプロパティのリストです。唯一のデータベース・サービスがアプリケーションに追加があるかどう

cloud.services.<database-service-name>.connection.hostname 
cloud.services.<database-service-name>.connection.name 
cloud.services.<database-service-name>.connection.password 
cloud.services.<database-service-name>.connection.port 
cloud.services.<database-service-name>.connection.username 
cloud.services.<database-service-name>.plan 
cloud.services.<database-service-name>.type 

database-service-nameが私の経験ではenv: block

Manifest.ymlファイルで定義されている、環境変数のセクションでデータベース・サービス名を定義する必要はありませんでした。

注:デフォルトスプリングによって

は、我々私たちの自己だけでApacheのDBCPのような接続プールプロバイダーによってサポートされているいくつかのプロパティを設定する必要があり、時間のが、ほとんど、サーブレットコンテナのプール可能な接続のサポートを使用しようとするだろう。このような場合、環境プロパティ(System.getProperty()またはSpring Environment.getProperty()を使用)を使用してデータソースBeanを手動で作成する必要があります。

+0

私が探していた情報です。ありがとう! –

+0

あなたは大歓迎です! – 11thdimension

関連する問題