Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enhancement: Add configuration metadata for Spring Boot application properties #475

Closed
moritzreiter opened this issue Oct 8, 2023 · 6 comments

Comments

@moritzreiter
Copy link

moritzreiter commented Oct 8, 2023

Spring Boot has a mechanism for adding configuration metadata to enable IDE support for application properties.

To illustrate this, have a look at this screenshot which shows auto-completion for application properties from the Pebbles templates engine Spring Boot integration:

Screenshot 2023-10-08 at 10 15 41

For Simple Java Mail on the other hand, this doesn't work and IntelliJ shows an error about unresolvable configuration properties for all the application properties introduced by the Spring module of Simple Java Mail:

Screenshot 2023-10-08 at 10 15 11

The usual method to create this metadata is to have it generated by the Spring Boot Configuration Processor. To my understanding, this would require turning the Simple Java Mail Spring module into a Spring Boot project.

At first I thought that only the automatic metadata generation depends on Spring Boot, but now my understanding is that the whole configuration metadata feature is Spring Boot only. So, I guess, turning the module into a Spring Boot project would really be the only way to get IDE support for the Simple Java Mail application properties.

I understand that this might constitute a rather significant design change to the module which could have implications I can't assess appropriately.

@bbottema
Copy link
Owner

bbottema commented Oct 8, 2023

Do we have quantitative data to support this decision? Specifically, do we have data on the ratio of Spring vs. Spring Boot users? Also, is it possible for a Spring Boot compatible project to maintain backward compatibility with Spring?

I would be willing to looking into converting this module, but not if I exclude an audience in doing so. However, another option could be to have a new module: the Simple Java Mail spring-boot-module.

@bbottema
Copy link
Owner

bbottema commented Oct 8, 2023

I found a way to do this with build-time-only Spring boot dependency to generate the file. However, to make this work I need to define a property structure in Java that conforms to the existing property list. This is not possible however.

For example, there is a property that ends in ".class", which is impossible to model in a Java class, since it is both a reserved keyword and existing method (.getClass()) that is final. Another issue is that the existing properties uses a property name both as a property key/value as well as nested properties list, for example: .poolsize= and .poolsize.keepalivetime=. This cannot be modeled in a java class, as you can't have two fields with the same name.

I'm not sure how to proceed with this, but right now it's taking too much time.

bbottema added a commit that referenced this issue Oct 8, 2023
…pring-configuration-metadata.json properly filled with all Simple Java Mail properties, used for hint support in IDE's that support it. Spring Boot dependency is build-time-only
bbottema added a commit that referenced this issue Oct 8, 2023
@bbottema
Copy link
Owner

bbottema commented Oct 8, 2023

Ok, I've jumped through a bunch of hoops to make this work. There were a few properties that contained underscores that are dashes with Spring Boot and two related properties (poolsize and poolsize.keepalivetime) that had to have an overloaded name (poolsize and poolsize-more.keepalivetime).

I pushed it to develop, so the generated spring-module dependency now contains a populated spring-configuration-metadata.json. Here's an updated spring-module jar, are you in a position to test this?

spring-module dependency + docs.zip

@moritzreiter
Copy link
Author

moritzreiter commented Oct 9, 2023

Wow, I'm a bit shocked by how you managed to provide a working solution for this within hours! 😀

I downloaded the JAR and added it to the classpath in my project and it seems to work great:

Screenshot 2023-10-09 at 14 57 55

This whole project is really great work, thanks so much for sharing it!

@bbottema
Copy link
Owner

bbottema commented Oct 9, 2023

Well, ChatGPT helped me out a lot with this. He really changed how I work and study!

@bbottema bbottema changed the title Add configuration metadata for Spring Boot application properties Enhancement: Add configuration metadata for Spring Boot application properties Oct 9, 2023
@bbottema bbottema added this to the 8.3.0 milestone Oct 9, 2023
@bbottema
Copy link
Owner

bbottema commented Oct 9, 2023

Thank for testing! Enhancement released in 8.3.0.

@bbottema bbottema closed this as completed Oct 9, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants