bootstrap.yml
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bootstrap.yml相关的知识,希望对你有一定的参考价值。
参考技术Aapplication.yml是用户级的资源配置项
bootstrap.yml是系统级的, 优先级更加高
SpringCloud会创建一个\'Bootstrap Context\',作为Spring应用的\'Application Context\'的 父上下文 .初始化的时候,\'Bootstrap Context\'负责从外部源加载配置属性并解析配置.这两个上下文共享一个从外部获取的\'Environment\'.\'Bootstrap\'属性有高优先级,默认情况下,他们不会被本地配置覆盖.\'Bootsrap context\'和\'Application Context\'有着不同的约定,所以新增了一个\'bootstrap.yml\'文件,保证\'Bootstrap Context\'和\'Application Context\'配置的分离.
bootstrap.yml 未在 Spring Boot 2 中加载
【中文标题】bootstrap.yml 未在 Spring Boot 2 中加载【英文标题】:bootstrap.yml not loading in Spring Boot 2 【发布时间】:2018-11-22 02:01:09 【问题描述】:我在启动需要连接到配置服务器的 Spring Boot 客户端应用程序时遇到问题。 bootstrap.yml 文件被忽略
配置服务器 - 这行得通!
server:
port: 8888
spring:
application:
name: configserver
cloud:
config:
server:
git:
uri:https://xxxxx@bitbucket.org/eco/properties.git
bootstrap.yml
- 配置客户端 - 不工作!
spring:
application:
name: api
cloud:
config:
uri: http://localhost:8888
启动应用程序时忽略文件 bootstrap.yml。
POM 客户端
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RC2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-cloud.version>2.0.0.RC2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Database dependencies -->
<dependency>
<groupId>com.oracle.jdbc</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.2</version>
<scope>system</scope>
<systemPath>$basedir/src/main/resources/lib/ojdbc7-12.1.0.2.jar</systemPath>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<finalName>api-emissor</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.3.5.RELEASE</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>$java.version</source>
<target>$java.version</target>
</configuration>
</plugin>
</plugins>
</build>
主类客户端
@SpringBootApplication
@EnableEurekaClient
@EnableAutoConfiguration(exclude = SecurityAutoConfiguration.class)
@ComponentScan("br.com.eco.api.emissor")
@EnableJpaRepositories("br.com.eco.api.emissor.repository")
@EntityScan("br.com.eco.api.emissor.domain")
public class Application
public static void main(final String[] args)
SpringApplication.run(Application.class, args);
为什么 bootstrap.yml 会被忽略?
【问题讨论】:
你不能混用 spring cloud 的版本。您使用的是旧版本的 spring cloud Netflix eureka 你认为这可能是我的问题吗? 也许吧,但在你有有效版本之前,我无法确定。 【参考方案1】:您需要指定一个配置名称,并且它必须与配置服务上的配置文件名称匹配。
spring:
cloud:
config:
name: myService # myService.yml or myService-[profile].yml( if you have a profile activated).
uri: http://localhost:8888
【讨论】:
【参考方案2】:应用程序将使用bootstrap.yml
,以防它使用一些spring-cloud依赖项。那可以是云发现客户端:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
或云配置客户端:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
【讨论】:
【参考方案3】:在 Spring Boot 配置客户端中添加此依赖项:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
【讨论】:
我只是发现我的应用程序没有通过在我的应用程序上使用 truss 来读取我的引导程序。这个建议解决了这个问题。 这个确实解决了我这边的问题。不是 spring-cloud-starter。 这个好像只有Spring cloud 3以上版本才可用mvnrepository.com/artifact/org.springframework.cloud/…【参考方案4】:您必须将此依赖项添加到pom.xml
:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
【讨论】:
【参考方案5】:在我的情况下,我使用 STS4 并且默认情况下生成的 POM 文件不起作用,我遇到了和你一样的问题,但是在我对 POM 文件进行了一些更改之后,一切正常,最后我发现了类似的东西在我的控制台中“从服务器获取配置”。 我的 POM 中的变化如下:
-
将 Spring Boot 版本更改为 2.2.6.RELEASE。
将spring cloud的版本改为Hoxton.SR6或Hoxton.SR4(我相信任何
Hoxton 版本可以使用)。
应用之前的更改后,我的 POM 文件如下所示:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<!-- <version>2.4.0</version> -->
<version>2.2.6.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>net.kha.microservices</groupId>
<artifactId>limits-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>limits-service</name>
<description>Demo project for Spring Boot - Cloud</description>
<properties>
<java.version>1.8</java.version>
<!-- <spring-cloud.version>2020.0.0-SNAPSHOT</spring-cloud.version> -->
<!-- <spring-cloud.version>2020.0.0-M4</spring-cloud.version> -->
<!-- Both are working with spring boot version 2.2.6.RELEASE
you should find something like "Fetching config from server at" in your console
each time you run the client project as spring boot app
-->
<spring-cloud.version>Hoxton.SR6</spring-cloud.version>
<!-- <spring-cloud.version>Hoxton.SR4</spring-cloud.version> -->
</properties>
【讨论】:
【参考方案6】:如果您定义了spring.config.location
,它将覆盖所有配置文件的路径,包括bootstrap.yml
的路径,因此您必须将spring.config.location
更改为spring.config.additional-location
。
因此,当您启动应用时,您必须添加 -Dspring.config.additional-location=/path/to/application.yml
。
更多信息请查看this
【讨论】:
【参考方案7】:你需要为spring cloud starter添加依赖。
【讨论】:
我认为没有任何效果。以上是关于bootstrap.yml的主要内容,如果未能解决你的问题,请参考以下文章