0

I have observed an inconsistent way properties are being read in Eclipse. I have a very simple Springboot web project with typical property files. Here is my project layout:

enter image description here

Notice the two property files: testapplication.properties and application.properties. They are identical at this point, the intention is to use them for test and non test environments.

When I try to run this application in Eclipse, I am getting an error about missing expected property values, for example: Could not resolve placeholder 'min.thread.count' in value "${min.thread.count}"

When I run the same setup using gradle's bootRun task, it works fine.

When I run the same setup in InteliJ it works fine.

If I rename the testapplication.properties to application.properties the application runs fine in Eclipse. As such it is using property form test folder.

In addition, I am pretty sure when I started Eclipse this morning I was able to run the application with a proper application.properties and testapplication.properties files. I was working on a unit test and renamed the testapplication.properties to application.properties, did some work, then renamed it back to testapplication.properties the application refused to start. I have attempted to replicate it: shut down eclipse with two different property files (application and testapplication), start it again and run application. However, at this moment I have the same issue (complaining about missing property value).

As you can see this i weird behaviour. As it stands I find that I cannot use Eclipse as I am not sure what it will do. I've switch to community edition of InteliJ as it seems to be working correctly. But as a long time fan of Eclipse I am heartbroken :)

Does anyone have any clue what could be causing this?

EDIT: I have checkin in my test project here: https://github.com/twolak2003/CamelSpringBootEureka.git in branch PropertyFileIssue. Simply clone, switch to PropertyFileIssue branch, import to eclipse as gradle project.

It is a simple vanilla spring cloud boot project running a eureka server and eureka client. For the purpose of this issue we'll just concentrate on eureka-service.

I am using latest Eclipse Oxygen. I did notice the same issue in Eclise Neon. I switched to Oxygen hoping the issue will go away. Only plugin is the Spring IDE. Using Java 8 to run this.

Test 1: Start the EurekaService/src/main/hello.java as Java application. It starts fine and will read the src/main/resources/application.property file.

Test 2: Rename the EurekaService/src/main/test/resources/restapplication.properties to EurekaService/src/main/test/resources/application.properties. Start the EurekaService application again.
Findings: It starts fine as well BUT it uses property file in the /src/test/resources. This to me is issue as well, it should not be using /test/ for running the application.

Test 3: Now rename the /src/test/resources/application.properties to /src/test/resources/testapplication.properties again. (this is repeat of test1). Once again run EurekaService/src/main/hello as java application. Finding Despite this being a repeat of test1 the test failed due to "Could not resolve placeholder 'tomek.prop' in value "${tomek.prop}"".

Am I doing something really stupid or is there an issue? For now with heavy heart I am switching to InteliJ to keep my project going. The behaviour of Eclipse is just too unpredictable for me to stomach for now :(

1 Answers1

0

So far I don't have a correct answer for this other than stop using Eclipse :). But there is workaround.

DO NOT use more than one application.property file.

If you need test properties to override actual properties then name your file as anything else but "application.property". Otherwise you'll get unpredictable behaviour and your Eclipse runtime get's confused.