Spring Boot文档说我们可以在application.properties文件中设置属性。 但是我找不到列出可以设置的可用属性的文档。 在哪里可以找到这样的文件?
例如,我要为嵌入式servlet设置documentRoot。 我发现setDocumentRoot()方法在AbstractEmbeddedServletContainerFactory.java中实现。 但是我不知道何时何地调用该方法,也不知道可以在application.properties中设置的属性名称。 我认为应该很容易,因为Spring Boot的主要目的是简化配置。
提前致谢。
更新:
正如Deinum先生建议的那样,我在application.properties中添加了“ server.document- root:someDirectoryName”,但是发生了以下错误。
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'document-root' of bean class [org.springframework.boot.context.embedded.properties.ServerProperties]: Bean property 'document-root' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1057) at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:915) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:82) at org.springframework.validation.DataBinder.applyPropertyValues(DataBinder.java:730) at org.springframework.validation.DataBinder.doBind(DataBinder.java:626) at org.springframework.boot.bind.RelaxedDataBinder.doBind(RelaxedDataBinder.java:78) at org.springframework.validation.DataBinder.bind(DataBinder.java:611) at org.springframework.boot.bind.PropertiesConfigurationFactory.doBindPropertiesToTarget(PropertiesConfigurationFactory.java:232) at org.springframework.boot.bind.PropertiesConfigurationFactory.bindPropertiesToTarget(PropertiesConfigurationFactory.java:204) at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessAfterInitialization(ConfigurationPropertiesBindingPostProcessor.java:312) ... 31 more
我认为这是因为org.springframework.boot.context.embedded.properties.ServerProperties实现的方式。(参见https://github.com/spring- projects/spring-boot/blob/97cb7f096798ecd016de71f892fa55585d45f5eb/spring- boot/src/main/java/org/springframework/boot/context/embedded/properties/ServerProperties.java)
它声明了“ @ConfigurationProperties(name =“ server”,ignoreUnknownFields = false)’。因此,它管理以“ server”开头的应用程序属性,并禁止未知的属性名称。 而且它不支持documentRoot getter / setter。
顺便说一句,org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration将Bean创建为ServerProperties类(请参阅https://github.com/spring- projects/spring-boot/blob/97cb7f096798ecd016de71f892fa55585d45f5eb/spring- boot-autoconfigure/src /main/java/org/springframework/boot/autoconfigure/web/ServerPropertiesAutoConfiguration.java),以便它可以参与配置过程。
因此,我尝试自己实现类似ServerProperties的服务器和类似ServerPropertiesAutoConfiguration的服务器。 代码如下:
package com.sample.server; import java.io.File; import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainerFactory; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SampleConfiguration { @Bean public SampleServerProperties sampleServerProperties() { return new SampleServerProperties(); } @ConfigurationProperties(name = "sample.server") public static class SampleServerProperties implements EmbeddedServletContainerCustomizer { private String documentRoot; public String getDocumentRoot() { return documentRoot; } public void setDocumentRoot(String documentRoot) { System.out.println("############## setDocumentRoot"); this.documentRoot = documentRoot; } @Override public void customize(ConfigurableEmbeddedServletContainerFactory factory) { if (getDocumentRoot() != null) { factory.setDocumentRoot(new File(getDocumentRoot())); } } } }
并将以下行添加到application.properties。
sample.server.documentRoot:someDirectoryName
…而且有效!
将“ ############### setDocumentRoot”打印到控制台,并且实际设置了文档根目录。
所以,我现在很高兴,但这是正确的方法吗?
目前,对原始问题的最正确答案是在单个位置没有(从技术上来说不可能)详尽的清单。我们会并且会尽可能地记录下来(在时间允许的情况下- 非常感谢您的捐款)。用户指南中有一个手动整理的属性列表,但列表并不详尽,甚至可能不准确。权威列表来自搜索源代码中的@ConfigurationProperties和@Value注释,以及偶尔使用RelaxedEnvironment(cf here)。howto文档中也有一些一般性建议。
@ConfigurationProperties
@Value
RelaxedEnvironment