AOT generation with Spring Cloud is broken as ConfigurationPropertiesBeanFactoryInitializationAotProcessor loops over all the @ConfigurationProperties-annotated types and try to get its merged bean definition to register the necessary hints. A singleton does not have a bean definition, which leads to:
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'keyProperties' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:860)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedBeanDefinition(AbstractBeanFactory.java:1092)
at org.springframework.boot.context.properties.ConfigurationPropertiesBeanFactoryInitializationAotProcessor.processAheadOfTime(ConfigurationPropertiesBeanFactoryInitializationAotProcessor.java:67)
at org.springframework.context.aot.BeanFactoryInitializationAotContributions.getContributions(BeanFactoryInitializationAotContributions.java:67)
at org.springframework.context.aot.BeanFactoryInitializationAotContributions.<init>(BeanFactoryInitializationAotContributions.java:49)
at org.springframework.context.aot.BeanFactoryInitializationAotContributions.<init>(BeanFactoryInitializationAotContributions.java:44)
at org.springframework.context.aot.ApplicationContextAotGenerator.generateApplicationContext(ApplicationContextAotGenerator.java:55)
at org.springframework.boot.AotProcessor.performAotProcessing(AotProcessor.java:150)
at org.springframework.boot.AotProcessor.process(AotProcessor.java:110)
at org.springframework.boot.AotProcessor.main(AotProcessor.java:227)
Comment From: snicoll
Interestingly enough, Spring Native uses the same logic so it should be something new in Spring Cloud.
Comment From: spencergibb
https://github.com/spring-projects/spring-framework/issues/28487 for some history. "keyProperties" and "textEncryptor" are registered the same way