web-dev-qa-db-ja.com

Spring Cloud Configuration Serverがローカルプロパティファイルで動作しない

ここにあるgithubのSpring Cloudプロジェクトで遊んでいます: https://github.com/spring-cloud/spring-cloud-config

ただし、githubからプロパティを取得する代わりに、ローカルプロパティファイルを読み取るためにいくつかの問題が発生しています。 githubへのすべての参照を削除しても、springはローカルファイルを無視しているようです。同様の質問がここに投稿されています: Spring-Cloud構成サーバーは構成プロパティファイルを無視します

しかし、私はまだ良い答えを見ていません。誰かが私にこの例を教えてくれるかどうか疑問に思っていますか?あらゆる種類のgitリポジトリを使用する代わりに、ローカルでプロパティを設定したいと思います。以前に誰かがこれに遭遇したことがあると思いますが、どこかにその例があれば、正しい方向に進むことができるように私は本当にそれを見たいです。

13
user3270760

私のコードはすべてここにあります https://github.com/spencergibb/communityanswers/tree/so2713114

src/main/Java/Application.Java

@Configuration
@EnableAutoConfiguration
@EnableConfigServer
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

src/main/resources/application.yml

spring:
  application:
     name: myconfigserver
  profiles:
     active: native

my:
  property: myvalue

src/main/resources/myapp.yml

my:
  otherprop: myotherval

myappという名前のアプリのプロパティを取得するには、次を実行します。

curl http://localhost:8080/myapp/default

{
     "name": "default",
     "label": "master",
     "propertySources": [
          {
                "name": "applicationConfig: [classpath:/myapp.yml]",
                "source": {
                     "my.otherprop": "myotherval"
                }
          },
          {
                "name": "applicationConfig: [classpath:/application.yml]",
                "source": {
                     "spring.application.name": "myconfigserver",
                     "spring.profiles.active": "native",
                     "my.property": "myvalue"
                }
          }
     ]
}
16
spencergibb

Spring config serverを使用してApple-service(Test Micro Service)の構成を読み取ることができます。

application.yml spring config application

spring:
    profiles:
        active: native
    cloud:
        config:
            server:
                native:
                    searchLocations: classpath:config/
server:
  port: 8888


endpoints:
    restart:
      enabled: true

.propertiesまたは.ymlファイルをsrc\main\resources\configフォルダー内に配置します。このファイルの名前が、マイクロサービスのspring.application.nameと一致していることを確認してください。

たとえば、spring.application.name = Apple-serviceの場合、プロパティファイルはApple-service.properties in src\main\resources\configになります=フォルダー。

bootstrap.yml Apple-service:

spring:
  application:
    name: Apple-service

cloud:
  config:
    uri: http://localhost:8888
7
rish1690

設定サーバーは、application.properties構成サーバーの内容:

spring.profiles.active=native
**spring.cloud.config.server.native.searchLocations=file:/source/tmp**

/source/tmpディレクトリ、クライアントのローカルプロパティファイルを保存します。たとえば、次のとおりです。

http://localhost:8888/a-bootiful-client/default

あなたが取得します:

{"name":"a-bootiful-client","profiles":["default"],"label":null,"version":null,"state":null,"propertySources":[{"name":"file:/source/tmp/a-bootiful-client.properties","source":{"message":"Kim"}}]}
2
Kim Huang

Mac OS環境で構成サーバーを実行しているときにも同じ問題が発生しました。これはLinuxまたはWindowsでは発生しませんでした。

次のようなbootstrap.ymlファイルでネイティブプロパティを設定しました。

spring:
  profiles:
    active: native

最後に、Macでの動作は、次のようにアクティブなプロファイルをjarファイルに渡すことでした。

Java -jar config-server.jar --spring.profiles.active=native

Mac OSで動作が異なる理由はまだわかりません。

2
Oreste

Spring.profiles.active = nativeを使用すると、Springのドキュメントが示唆しているように見えますが、動作させることもできませんでした。私のapplication.propertiesファイルは

server.port=8888
spring.cloud.config.profiles=native 

しかし、URLからの応答

http://localhost:8888/config-server/env

{"name":"env","label":"master","propertySources":[{"name":"https://github.com/spring-cloud-samples/config-repo/application.yml","source":{"info.url":"https://github.com/spring-cloud-samples","info.description":"Spring Cloud Samples"}}]}

これは、ネイティブプロファイルが無視され、サーバーがまだgithubをプロパティソースとして検討していることを示しています。

私が遭遇した小さな追加の問題は、構成サービスのデフォルトポートです。 Sprin Cloud Configドキュメントによると、8888になります。application.propertiesからserver.port = 8888を削除すると、デフォルトのSpring Bootポートであるポート8080で構成サーバーが起動しますが、使用する構成サーバーはありません。

2
MrkK

ローカルリポジトリとbootstrap設定で動作させることができました:

Java -jar spring-cloud-config-server-1.0.0.M3-exec.jar --spring.config.name=bootstrap

Bootstrap.ymlファイルは./config/フォルダーに配置されます。

server:
  port: 8080
spring:
  config:
    name: cfg_server
  cloud:
    config:
      server:
       git:
        uri: /home/us/config_repo
        searchPaths: pmsvc,shpsvc
1
Genadyk

ファイルへのパスにスペースがある場合、Macでこの問題が発生しました。

spring.cloud.config.server.native.search-locations=file:///Users/.../Development/Folder with a space /prj

また、Usersの前に3つのスラッシュがあることに注意してください。

spring.cloud.config.server.native.search-locations=file:///Users/...

または私は使用します:

spring.cloud.config.server.native.search-locations=file://${user.home}/Desktop

nativeプロパティは次のとおりです。

spring.profiles.active=native
0
Kirill Ch

ローカルマシンでも同じ問題が発生しましたが、リモートサーバーでは問題なく動作します。

@Oresteの答えは私にとっては有効です。だから私は再びエラーログをチェックし、そして私は見つけた

 2018-06-25 16:09:49.789  INFO 4397 --- [           main] t.p.a.s.api.user.UserServiceApplication  : The following profiles are active:  someProfileISetBefore

したがって、私の場合の根本的な理由は、以前に環境変数を設定したことですが、それを削除するのを忘れています。そして、それはアプリケーションのプロパティファイルの設定を上書きします。

皆さんが私のような愚かな間違いをしないことを願っています。修正者:

 unset spring_profiles_active 
0
EdwinSZ