20

我一直在玩 github 上的 Spring Cloud 项目:https ://github.com/spring-cloud/spring-cloud-config

但是,我一直遇到一些问题,让它读取本地属性文件而不是从 github 中提取属性。即使我删除了对 github 的所有引用,spring 似乎也忽略了本地文件。这里发布了一个类似的问题: Spring-Cloud configuration server ignores configuration properties file

但是我还没有看到任何好的答案。我想知道是否有人可以指出我的例子?我想在本地设置我的属性,而不是使用任何类型的 git repo。我假设有人以前遇到过这种情况,如果某处有它的例子,我真的很想看到它,这样我就可以朝着正确的方向前进。

4

10 回答 10

22

我所有的代码都在这里https://github.com/spencergibb/communityanswers/tree/so27131143

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"
                }
          }
     ]
}
于 2014-11-26T21:16:53.127 回答
13

我可以使用 Spring 配置服务器读取苹果服务(测试微服务)的配置。

spring config 应用程序的示例application.yml

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那么属性文件应该是src \main\resources\config文件夹中的apple-service.properties 。

苹果服务的bootstrap.yml示例:

spring:
  application:
    name: apple-service

cloud:
  config:
    uri: http://localhost:8888
于 2015-10-27T06:00:45.810 回答
5

这是我所做的:

关注 https://medium.com/@danismaz.furkan/spring-cloud-config-with-file-system-backend-c18ae16b7ad5

1) !!不要忘记你的虚拟机选项!!:

-Dspring.profiles.active=native

(在 Netbeans 中:configserver->project->properties>Run->VM options

2) 在 application.properties 中

#spring.cloud.config.server.native.searchLocations=file:///C:/tmp/config

spring.cloud.config.server.native.searchLocations=classpath:/config

或 applications.yml

spring:

    cloud:

         config:

            server:

                native:

                    search-locations  : file:///C:/tmp/config
                    #search-locations : classpath:/config

笔记:

n1:search-locations 和 searchLocations 都有效

n2: file:/// => 硬文件路径

喜欢

c:/temp/config/
           app-admin.yml
           app-admin-develop.yml
           .... 

n3:用于您的配置文件配置文件

类路径:/

喜欢

Other sources/src/main/resources/config/app-admin.yml

n4:如果不设置 vm 选项,我无法使文件路径正常工作。不要忘记!仅在您的应用程序配置中设置 spring.profiles.active=native 对我来说并不能解决问题

n5:http 查询示例

http://localhost:8998/app-admin/default/yml

给出 app-admin.yml

http://localhost:8998/app-admin/develop/yml

给 app-admin-develop.yml

于 2019-10-18T12:39:34.620 回答
3

使用 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 ,则配置服务器从端口 8080 开始,这是默认的 Spring Boot 端口,但不是应该使用的一个配置服务器。

于 2014-11-26T18:58:10.090 回答
3

在 Mac OS 环境中运行配置服务器时,我遇到了同样的问题。这在 Linux 或 Windows 中没有发生。

我在bootstrap.yml文件中设置了本机属性,如下所示:

spring:
  profiles:
    active: native

最后,它在 mac 上为我工作的方式是将活动配置文件传递给 jar 文件,就像这样。

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

我仍然不知道为什么它在 Mac OS 中的行为不同。

于 2015-06-19T08:08:16.450 回答
3

如果配置服务器包含以下内容,则配置服务器将读取本地属性文件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"}}]}
于 2017-10-31T15:31:05.250 回答
2

当文件路径中有空格时,我在 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

属性是:

spring.profiles.active=native
于 2019-08-12T20:38:13.183 回答
1

我能够让它与本地 repo 和引导配置一起工作:

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
于 2014-12-01T12:59:33.373 回答
1

我在本地机器上遇到了同样的问题,但在我的远程服务器上运行良好。

@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 
于 2018-06-25T09:08:33.353 回答
0

我正在使用 Spring Boot 版本 2.6.0-SNAPSHOT

如果您尝试在 .properties 文件中使用本地存储库,则将它们包含在服务器的 application.properties 文件中

server.port=8888
spring.profiles.active=git
spring.cloud.config.server.git.uri=file:/link-to-local-git-repo

pwd您可以通过在 git repo 目录中的终端上键入 (ubuntu) 来获取到本地 git repo 的链接。

重点:确保 spring.profiles.active 的值是git not native

然后输入

http://localhost:8888/<name-of-file>/default

在浏览器选项卡中

于 2021-08-27T02:38:38.787 回答