ここにあるgithubのSpring Cloudプロジェクトで遊んでいます: https://github.com/spring-cloud/spring-cloud-config
ただし、githubからプロパティを取得する代わりに、ローカルプロパティファイルを読み取るためにいくつかの問題が発生しています。 githubへのすべての参照を削除しても、springはローカルファイルを無視しているようです。同様の質問がここに投稿されています: Spring-Cloud構成サーバーは構成プロパティファイルを無視します
しかし、私はまだ良い答えを見ていません。誰かが私にこの例を教えてくれるかどうか疑問に思っていますか?あらゆる種類のgitリポジトリを使用する代わりに、ローカルでプロパティを設定したいと思います。以前に誰かがこれに遭遇したことがあると思いますが、どこかにその例があれば、正しい方向に進むことができるように私は本当にそれを見たいです。
私のコードはすべてここにあります 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"
}
}
]
}
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
設定サーバーは、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"}}]}
Mac OS環境で構成サーバーを実行しているときにも同じ問題が発生しました。これはLinuxまたはWindowsでは発生しませんでした。
次のようなbootstrap.yml
ファイルでネイティブプロパティを設定しました。
spring:
profiles:
active: native
最後に、Macでの動作は、次のようにアクティブなプロファイルをjarファイルに渡すことでした。
Java -jar config-server.jar --spring.profiles.active=native
Mac OSで動作が異なる理由はまだわかりません。
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で構成サーバーが起動しますが、使用する構成サーバーはありません。
ローカルリポジトリと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
ファイルへのパスにスペースがある場合、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
ローカルマシンでも同じ問題が発生しましたが、リモートサーバーでは問題なく動作します。
@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