我正在处理一个多模块的Maven项目,其中每个模块都是一个Spring Boot应用程序(即打包为一个可执行的jar)。有些模块依赖于其他模块。该项目使用platform-bom版本1.1.4版本。
我发现了一个我认为奇怪的逻辑来决定使用哪些应用程序属性文件--尽管没有明确地与https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html中的信息相反,但充其量似乎还是不直观的。
这种情况是在下列情况下发现的:
>
模块A在其resources文件夹中有一个application.properties文件,因此它被打包到Spring BootJAR的根目录中。这个application.properties定义了一个标准的Spring JPA数据源。
模块B依赖于A,但在其中有自己的application.yml属性文件(以及一个配置文件特定的.properties文件,例如application-foo.properties)。该文件没有JPA数据源的条目,但代码期望注入一个数据源。
出乎意料的是,当B的测试在Maven构建中运行时,来自A的application.properties似乎被读取,并用于配置B使用的数据源。从上面的链接,可以推断这是正确的行为(24.3中的“类路径根”可以理解为在类路径上的jar的根中,在为B运行测试时,A的jar将是这个根)。NB还处理.yml属性。
但是,如果我在B的资源中提供了一个空的application.properties,以及.yml文件,那么在测试期间,这似乎是优先的,而来自A的application.properties将不再被处理。仍在处理.yml文件。
从文档中我会想到所有符合条件的属性文件都应该被处理,也就是说,如果A的application.properties被读取,那么如果B提供了自己的文件(以B的优先),它仍然应该被处理。而且.properties和.yml文件似乎不是一样对待的(application.yml的存在并没有阻止A的application.properties被读取,但B中的application.properties却阻止了)。
请有人澄清预期的行为是什么,并评论文档(上面链接的)是否正确?特别是:
1)当文档说明属性文件可以从“类路径根”加载时,是否也应该包括类路径上任何JAR的根?
2)提供B中的应用程序.属性是否应该阻止找到A?
3)对于这种行为,是否应该区别对待.yml属性?
类路径根只是它所包含的所有存档中所有文件的扁平化表示。您可以将其视为解压目录中的任何内容,然后读取它(物理上是不同的,但这与读取文件时发生的情况类似)。最接近您的文件将在任何其他文件之前被读取。因此,当您提供自己的application.properties
时,它将覆盖jar文件中包含的内容。
因此,是的,这将停止读取JAR中的文件。为什么假设20个罐子都包含一个application.properties
应该如何保证一个订单,哪一个应该赢?特别是如果它们包含重叠的属性。因此只会读取一个。
.properties
和.yml
是不同的文件,因此都是读取的(我甚至认为.properties
是在.yml
文件之前读取的,但不确定)。所以,是的,这也是预期的行为。
我有一个SpringBoot项目(maven/java8)。 我想通过Maven配置文件(dev.properties|prod.properties)过滤src/main/Resources/application.properties中的一些自定义变量 Maven命令: 应用属性: 开发属性: prod.properties: pom.xml:
我在src/main/resources下创建了2个文件: 应用程序。属性 第一个具有从env变量中获取值的属性,而后者具有固定值。 根据这里的具体情况,我以这样的方式推出了Spring靴: 然而,不会产生任何影响,并且应用程序是局部的。属性似乎被忽略。 有什么提示吗?
实际上,这不是一个问题,而是一个奇怪的事情,我想理解。我将SpringBoot2与嵌入的Tomcat一起使用。我还添加了自签名SSL证书。这是非常常见的配置: 我制作了一个连接器,强制HTTP->https重定向,就像在许多示例中一样: 如果我不在配置中指定server.port属性,我将看到以下错误: 说明: 配置为侦听端口8080的Tomcat连接器启动失败。端口可能已经在使用中,或者连接器可
我在时间管理上使用过很多次。 当向mktime提供一个包含负值的结构tm时,我注意到一些非常奇怪的事情。 以下面的代码为例。2013年11月3日,洛杉矶的DST发生了变化。如果我在tm中指定时间为2013-11-04午夜,并减去24小时,则得到的值与2013-11-03午夜相同。它与UTC的时差为25小时,这很好,就像isdst=-1一样,我们可以说是在看“Wallcock time”。减去144
我正在将一个非常基本的web应用程序部署到Google应用程序引擎。我使用的是Springboot,我可以在本地很好地运行应用程序,但当我部署到Google时,应用程序引擎不会启动实例。我在启动时配置了一个云SQL数据源。 我有云sql配置属性配置src/main/Resources/application.properties.App Engine似乎找不到这些属性,所以它无法正确设置Cloud
我正在尝试将我的grails应用程序从h2切换到PostgreSQL。我为达到目标所做的步骤: > 从http://jdbc.postgresql.org/download.html下载JDBC(JDBC4 Postgresql驱动程序,版本9.3-1100) 将JDBC附加到 /lib文件夹 更改数据源。现在看起来像: 现在比赛开始了。我在GGTS中键入“run app”时出错。由于验证原因,我