我观察到在Eclipse中读取属性的方式不一致。我有一个非常简单的Springboot Web项目,它包含典型的属性文件。这是我的项目布局:
请注意两个属性文件: testapplication.properties 和 application.properties 。它们在这一点上是相同的,目的是将它们用于测试和非测试环境。
当我尝试在Eclipse中运行此应用程序时,我收到有关缺少预期属性值的错误,例如: 无法在值“$ {min.thread.count}”中解析占位符'min.thread.count'
当我使用gradle的bootRun任务运行相同的设置时,它可以正常工作。
当我在InteliJ中运行相同的设置时,它可以正常工作。
如果我将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-service。
我正在使用最新的Eclipse Oxygen。我在Eclise Neon中注意到了同样的问题。我切换到氧气,希望问题会消失。只有插件才是Spring IDE。使用Java 8来运行它。
测试1:以Java应用程序的身份启动 EurekaService / src / main / hello.java 。 它开始很好,将读取src / main / resources / application.property文件。
测试2:将 EurekaService / src / main / test / resources / restapplication.properties 重命名为 EurekaService / src /主/测试/资源/的 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的行为对我来说太难以预测了:(
答案 0 :(得分:0)
到目前为止,除了停止使用Eclipse之外,我没有正确的答案:)。但有解决方法。
不要使用多个application.property文件。
如果您需要测试属性来覆盖实际属性,请将文件命名为“application.property”。否则,您将获得不可预测的行为,并且您的Eclipse运行时变得困惑。