我观察到在Eclipse中读取属性的方式不一致。我有一个非常简单的Springboot Web项目,它包含典型的属性文件。这是我的项目布局:
请注意两个属性文件:testapplication.properties和application.properties。它们在这一点上是相同的,目的是将它们用于测试和非测试环境。
当我尝试在Eclipse中运行此应用程序时,我收到有关缺少预期属性值的错误,例如:无法在值“$ {min.thread.count}”中解析占位符'min.thread.count'
当我使用gradle的bootRun任务运行相同的设置时,它工作正常。
当我在IntelliJ中运行相同的设置时,它工作正常。
如果我将testapplication.properties重命名为application.properties,那么应用程序在Eclipse中运行良好。因此它使用属性表单测试文件夹。
另外,我很确定当我今天早上启动Eclipse时,我能够使用正确的application.properties和testapplication.properties文件运行应用程序。我正在进行单元测试并将testapplication.properties重命名为application.properties,做了一些工作,然后将其重命名为testapplication.properties,应用程序拒绝启动。我试图复制它:用两个不同的属性文件(应用程序和测试应用程序)关闭eclipse,再次启动它并运行应用程序。但是,此刻我有同样的问题(抱怨遗失物业价值)。
正如你可以看到这种奇怪的行为。目前我发现我不能使用Eclipse,因为我不确定它会做什么。我已切换到InteliJ的社区版,因为它似乎正常工作。但作为Eclipse的长期粉丝我很伤心:)
有没有人有任何线索可能导致这种情况?
编辑:我在我的测试项目中签到了:分支PropertyFileIssue中的https://github.com/twolak2003/CamelSpringBootEureka.git。只需克隆,切换到PropertyFileIssue分支,导入eclipse作为gradle项目。
这是一个简单的vanilla spring云启动项目,运行eureka服务器和eureka客户端。出于本期目的,我们将专注于eureka服务。
我正在使用最新的Eclipse Oxygen。我在Eclipse Neon中注意到了同样的问题。我切换到氧气,希望问题会消失。只有插件才是Spring IDE。使用Java 8来运行它。
测试1:启动EurekaService / src / main / hello.java作为Java应用程序。它开始很好,将读取src / main / resources / application.property文件。
测试2:将EurekaService / src / main / test / resources / restapplication.properties重命名为EurekaService / src / main / test / resources / application.properties。再次启动EurekaService应用程序。 调查结果:它也可以正常运行但它在/ src / test / resources中使用属性文件。这对我来说也是问题,它不应该使用/ test /来运行应用程序。
测试3:现在再次将/src/test/resources/application.properties重命名为/src/test/resources/testapplication.properties。 (这是test1的重复)。再次运行EurekaService / src / main / hello作为java应用程序。发现尽管这是test1的重复,但测试失败的原因是“无法解决占位符'tomek.prop'的值”$ {tomek.prop}“”。
我做的事情真是愚蠢还是有问题?现在心情沉重,我转而使用InteliJ来保持我的项目。 Eclipse的行为对我来说太难以预测了:#
到目前为止,除了停止使用Eclipse之外,我没有正确的答案:)。但有解决方法。
不要使用多个application.property文件。
如果需要测试属性来覆盖实际属性,则将文件命名为“application.property”。否则,您将获得不可预测的行为,并且您的Eclipse运行时变得困惑。