在Eclipse

时间:2018-02-27 17:49:09

标签: spring eclipse spring-boot spring-boot-test

我观察到在Eclipse中读取属性的方式不一致。我有一个非常简单的Springboot Web项目,它包含典型的属性文件。这是我的项目布局:

enter image description here

请注意两个属性文件: 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的行为对我来说太难以预测了:(

1 个答案:

答案 0 :(得分:0)

到目前为止,除了停止使用Eclipse之外,我没有正确的答案:)。但有解决方法。

不要使用多个application.property文件。

如果您需要测试属性来覆盖实际属性,请将文件命名为“application.property”。否则,您将获得不可预测的行为,并且您的Eclipse运行时变得困惑。