Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Spring Boot 2.2.1中的External application.properties文件重写值_Spring Boot - Fatal编程技术网

Spring boot Spring Boot 2.2.1中的External application.properties文件重写值

Spring boot Spring Boot 2.2.1中的External application.properties文件重写值,spring-boot,Spring Boot,我看到了很多关于Spring Boot外部配置的问题,具体来说,就是将应用程序.properties文件外部化,但是,对于外部化的application.properties文件中的属性值应该合并还是类路径上的整个.properties文件应该被外部文件覆盖,没有找到具体的答案 在最近的应用程序升级到Spring Boot 2.2.1发行版之后,需要使用Spring.main.allow bean definition overriding=true属性启用bean重写,该属性在类路径上的app

我看到了很多关于Spring Boot外部配置的问题,具体来说,就是将
应用程序.properties
文件外部化,但是,对于外部化的application.properties文件中的属性值应该合并还是类路径上的整个.properties文件应该被外部文件覆盖,没有找到具体的答案

在最近的应用程序升级到Spring Boot 2.2.1发行版之后,需要使用
Spring.main.allow bean definition overriding=true
属性启用bean重写,该属性在类路径上的application.properties文件中设置。由于我们希望使用external application.properties文件,我创建了一个(同名)文件,但没有前面提到的属性,并在IntelliJ中加载了以下属性:

java-jarappname.jar--spring.config.location=“C:\Users\User\Downloads\application.properties”

出现此错误时,外部props文件似乎完全覆盖了类路径文件,而没有在类路径文件中查找提到的属性,也没有使用类路径
应用程序中缺少的属性。properties

***************************
APPLICATION FAILED TO START
***************************

Description:

The bean 'userRepository' could not be registered. A bean with that name has already been defined and overriding is disabled.

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

将bean重写属性添加到external application.properties文件中,但从classpath one中删除它之后,错误消失了

Spring文档中明确指出:

Spring Boot使用一个非常特殊的PropertySource顺序,该顺序设计为允许合理地覆盖值。按以下顺序考虑属性:

  • 打包jar之外的应用程序属性(Application.properties和YAML变体)
  • 打包在jar中的应用程序属性(Application.properties和YAML变体)
  • 在使用IntelliJ和打包的jar进行测试之后,这两种方法表现出相同的特性:似乎整个文件都被覆盖,并且没有合并值,而只是从外部化的属性文件加载。我的问题是,这是预期的行为还是我错过了什么


    编辑:仅当Spring Boot检测到文件时,才使用jar测试行为,但是通过使用
    Spring.config.location
    指定文件的完整路径,此行为不适用,仅加载该文件。看见而是使用
    spring.config.additional locations
    作为属性,只指定目录而不是full文件。它将被加载,然后应用给定的规则。感谢您的回复,这是有意义的。为此,我创建了一个目录C:\Users\\custom config\,在其中我放置了application.properties文件,其中缺少的属性将由类路径文件拾取。在IntelliJ中将程序参数添加为“.--spring.config.additional location=file:C:\Users\\custom config\”,但该属性不是从类路径文件加载的(错误仍然存在)。路径字符串有问题吗,你能给我一个有效文件系统路径的例子吗?编辑:它现在正在工作,构建时出现了一些不相关的问题。谢谢你的帮助!