2017-06-07 12 views
0

私はこのチュートリアルhttps://github.com/cf-platform-eng/spring-boot-cities/tree/master/cities-serviceに従ってCloud FoundryでSpringブート・アプリケーションを実行しようとしています。私はローカルのbosh-liteインストールを持っていますSpring Boot Cloud Foundryエラーでユニークなサービス・マシニング・インタフェース・エラーが発生しない

私のSpringブートアプリケーションはデータベースとしてpostgresqlに接続します。ローカル(ホストマシン)で実行中のPostgresqlインスタンスに接続しようとしています

ローカルのTomcatにデプロイすると、アプリケーションがローカルで正常に動作します。 しかし、私がbosh-liteにアプリケーションをデプロイすると、次のエラー "No unique service maching interface error"で失敗します。私のコードは、私のコードをビルドするためにMavenを使用していることを除いて、チュートリアルで言及されているものとexcatly同じです。

2017-06-07T22:29:54.44+0530 [App/0] OUT Caused by: org.springframework.cloud.CloudException: No unique service matching interface javax.sql.DataSource found. Expected 1, found 0 
2017-06-07T22:29:54.44+0530 [App/0] OUT  at org.springframework.cloud.Cloud.getSingletonServiceConnector(Cloud.java:149) ~[spring-cloud-core-1.2.3.RELEASE.jar!/:na] 
2017-06-07T22:29:54.44+0530 [App/0] OUT  at org.saurav.cf.casestudy.employee.db.DataSourceConfiguration.dataSource(DataSourceConfiguration.java:20) ~[classes/:na] 
2017-06-07T22:29:54.44+0530 [App/0] OUT  at org.saurav.cf.casestudy.employee.db.DataSourceConfiguration$$EnhancerBySpringCGLIB$$847aab5e.CGLIB$dataSource$0(<generated>) ~[classes/:na] 
2017-06-07T22:29:54.44+0530 [App/0] OUT  at org.saurav.cf.casestudy.employee.db.DataSourceConfiguration$$EnhancerBySpringCGLIB$$847aab5e$$FastClassBySpringCGLIB$$2ad81e2b.invoke(<generated>) ~[classes/:na] 
2017-06-07T22:29:54.44+0530 [App/0] OUT  at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-4.3.8.RELEASE.jar!/:4.3.8.RELEASE] 
2017-06-07T22:29:54.44+0530 [App/0] OUT  at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358) ~[spring-context-4.3.8.RELEASE.jar!/:4.3.8.RELEASE] 
2017-06-07T22:29:54.44+0530 [App/0] OUT  at org.saurav.cf.casestudy.employee.db.DataSourceConfiguration$$EnhancerBySpringCGLIB$$847aab5e.dataSource(<generated>) ~[classes/:na] 
2017-06-07T22:29:54.44+0530 [App/0] OUT  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_131] 

私のpostgresへの接続は問題ありません。私は春のクラウドコネクタを使用せず、通常application.propertiesから値を読み取ると、同じアプリケーションが正常に動作します。

私pom.xml`は私が見ていた

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>org.saurav.cf.casestudy</groupId> 
    <artifactId>employeerest</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <name>employeerest</name> 
    <description>Demo project for Spring Boot</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.5.3.RELEASE</version> 
     <relativePath/> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
     <!-- <start-class>org.saurav.cf.casestudy.employee.EmployeerestApplication</start-class> --> 
    </properties> 



    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-rest</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-hateoas</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-cloud-connectors</artifactId> 

</dependency> 



     <dependency> 
      <groupId>org.postgresql</groupId> 
      <artifactId>postgresql</artifactId> 
      <scope>runtime</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 


<dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.14</version> 
     </dependency> 


    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 


</project> 

`

[UPDATE] 以下スコットの答えあたりとして(春ブーツクラウドコネクタとpostgrsqlドライバーの依存関係を持っています)私はタグとラベルを持つことはできませんので、私は提供されたサービスを提供するユーザーです。しかし、私はjdbcのURLを追加しました。 は今、私のアプリは、以下のエラーこの私は私のapplication.propertiesで"spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect"を設定しているが、まだそれは私がまた私のDBを実行しているとDB設定されていることを確認している

動作しないために

Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set 

で失敗しています私のサービスインスタンスで正しいです。以下は

あなたは依存関係としてspring-boot-starter-cloud-connectorsが含まれている場合は、私のサービスインスタンスが

"VCAP_SERVICES": { 
    "user-provided": [ 
    { 
    "credentials": { 
    "jdbcUrl": "jdbc:postgresql://10.0.2.2:5432/employee", 
    "username": "postgres", 
    "password": "admin", 
    "postgresUri": "postgresql://10.0.2.2:5432/employee", 
    "uri": "postgresql://10.0.2.2:5432/employee" 
    }, 
    "label": "user-provided", 
    "name": "postgresql-cf-service", 
    "syslog_drain_url": "", 
    "tags": [], 
    "volume_mounts": [] 
    } 
    ] 
} 

` よろしく、 Saurav

答えて

1

をcontent`、そして春クラウドコネクタに必要なjava.sql.DataSource Beanを作成しようとしていますデータベースに接続します。コネクタはservice bindingcertain characteristics)を探してこれを行います。 No unique service matching interface javax.sql.DataSource foundメッセージは、コネクタが適切なタイプのサービスバインディングを検出できなかったことを示します。

サンプルアプリケーションでコネクタを使用する場合は、Postgres接続の詳細をuser-provided service instanceに作成し、そのサービスインスタンスをアプリケーションにバインドする必要があります。

また、spring-boot-starter-cloud-connectorsの依存関係を削除し、代わりにspring.datasourceプロパティを使用してapplication.ymlにデータベース接続を構成することもできます。

これらのオプションについては、blog postで詳しく説明しています。

+0

こんにちはScott..iは、私はすでにPostgreSQLのサービスインスタンスを作成していることを言及するのを忘れてしまった...しかし、まだそれは私が私のサービスインスタンスの資格情報をupdaed、今いる – saurav

+0

を動作しません。 org.hibernate.HibernateException: 'hibernate.dialect'が設定されていないとDialectResolutionInfoへのアクセスができませんerror.iが詳細を指定して質問を更新しました – saurav

+0

サービスの資格情報が完全なURIで更新されました。 。 "uri"のように: "postgresql:// postgres:[email protected]:5432/employee" – saurav

0

他の読者の全体的な解決策を要約するだけです。

スプリングブートアプリケーションをデータベース(他のマシンでホストされている)とやり取りし、クラウドファウンドリからアプリケーションを実行するシナリオがある場合は、次に、以下のいくつかのヒントに従ってください。

  1. あなたの春のブートアプリケーションをデプロイし、春ブートクラウドコネクタは、あなたのクラスパス内のすべての適切な依存関係(春・ブート・クラウドコネクタと瓶を持っていることを確認し使用したいたら。
  2. あなたがしたい場合は資格情報は、サービスインスタンスパラメータでは、この仕様http://cloud.spring.io/spring-cloud-connectors/spring-cloud-cloud-foundry-connector.html#_postgresql
  3. に準拠.Makeは必ずアプリケーションとサービスインスタンスをバインドするあなたはuriパラメータを使用していることを確認してデータベースを確認してください
  4. URIを構築するために、ユーザー名とパスワードに依存しませんインスタンスが実際に実行されており、アプリケーションservを作成していますあなたのクラウドファウンドリーアプリからのアウトバウンド通信を可能にするアイスグループ。 https://docs.cloudfoundry.org/concepts/asg.html#viewing

手順3と4は、間違いです。一度修正するとアプリケーションはうまく動作します。

よろしく、 Sauravは

関連する問題