Liste der verfügbaren Eigenschaften für die Anwendung.Eigenschaften in den Frühling Starten?
Spring-Boot-Dokument sagt, dass wir die Eigenschaften in der Anwendung.Eigenschaften-Datei.
Aber ich kann nicht finden, ein Dokument, das listet die verfügbaren Eigenschaften, die festgelegt werden können.
Wo finde ich ein solches Dokument?
Zum Beispiel, ich möchte zu setzen, documentRoot für embedded servlet.
Ich fand, dass die setDocumentRoot () - Methode implementiert, in AbstractEmbeddedServletContainerFactory.java.
Aber ich weiß nicht, Wann oder wo Sie zum aufrufen der Methode, oder den Namen der Eigenschaft, die festgelegt werden können, in Anwendung.Eigenschaften.
Ich denke, es sollte einfach sein, da Spring Boot ist sehr Zweck zu lindern, ist die Konfiguration.
Vielen Dank im Voraus.
UPDATE:
M. Deinum sugggested, ich fügte hinzu, 'server.Dokument-Wurzel: someDirectoryName", um die Anwendung.Eigenschaften, aber der folgende Fehler ist aufgetreten.
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
Ich denke, es ist wegen der Art, org.springframework.boot.Kontext.eingebettet wird.Eigenschaften.ServerProperties umgesetzt. (Siehe https://github.com/spring-projects/spring-boot/blob/97cb7f096798ecd016de71f892fa55585d45f5eb/spring-boot/src/main/java/org/springframework/boot/context/embedded/properties/ServerProperties.java)
Er erklärt '@ConfigurationProperties(name = "server" ignoreUnknownFields = false)'.
So, es verwaltet die Anwendung die Eigenschaften, die beginnt mit "server", und disallowes unbekannte Eigenschaft name.
Und es unterstützt nicht documentRoot getter/setter.
BTW, ServerProperties Klasse gemacht ist, um eine Bohne von org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration (Siehe https://github.com/spring-projects/spring-boot/blob/97cb7f096798ecd016de71f892fa55585d45f5eb/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerPropertiesAutoConfiguration.java), so dass Sie teilnehmen können in der Konfiguration aus.
So, ich habe versucht zu implementieren ServerProperties-wie ein und ServerPropertiesAutoConfiguration-wie man selbst.
Der code ist wie folgt:
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()));
}
}
}
}
Hinzugefügt und folgende Zeile zur Anwendung.Eigenschaften.
Probe.server.documentRoot: someDirectoryName
...Und es funktioniert!
"############## setDocumentRoot" wird auf der Konsole ausgegeben, und das Dokument-root-tatsächlich eingestellt.
So, ich bin jetzt glücklich, aber ist das der richtige Weg, es zu tun?
- verwenden
server.document-root
wie der name der Eigenschaft. Im Grunde nehmen Sie den Namen der Eigenschaft, und fügen Sie eine-
gibt den Namen der Eigenschaft. Also im Grundeserver.context-path
setzt die Basis-URL für Ihre Anwendung. Siehe auch github.com/spring-projects/spring-boot/issues/121 . - Danke @M. Deinum, aber es funktioniert nicht. Ich aktualisiert meine Frage mit meinem neuen code.
- Danke dir auch @M. Deinum zu erwähnen, die Spring-Boot-Problem.
ServerProperties
(und alle Bohnen markiert@ConfigurationProperties
) binden externe Eigenschaften, wie Sie entdeckt haben. Sie binden auch in einer "entspannten" Weise (also Bindestriche und Unterstriche statt angenommen von camelCase). AberServerProperties
keinendocumentRoot
(daher die Fehlermeldung). Was wollten Sie damit erreichen, dass sich genau?- Vielen Dank für die Informationen. Ich möchte in der Lage sein, ändern Sie die Dokument-Wurzel, um, wo immer ich will, unabhängig von den classpath und aktuelle Verzeichnis, indem Sie das Verzeichnis in der Anwendung.Eigenschaften. Siehe meine andere Frage (stackoverflow.com/questions/20064241/...), die Sie bereits gelesen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die richtige Antwort auf die ursprüngliche Frage im moment ist, dass es nicht (und technisch nicht) eine erschöpfende Liste in einem einzigen Standort. Wir können und dokumentieren, wie viel davon, wie wir können (wenn es die Zeit zulässt - Beiträge dankend angenommen). Es ist eine manuell gepflegte Liste der Eigenschaften durch eine nicht abschließende und möglicherweise ungenauen Liste in er Bedienungsanleitung. Die definitive Liste kommt von der Suche der source-code für
@ConfigurationProperties
und@Value
Anmerkungen, sowie die gelegentliche Verwendung vonRelaxedEnvironment
(c.f. hier). Es gibt auch einige Allgemeine Hinweise in der howto docs.application.yml
ist nicht gültig jetzt.Ihre Frage ist sehr angebracht. Ich fand eine alternative, einfachere Lösung, wenn ich war auf der Suche für ajp
Konfiguration (http://www.appsdev.is.ed.ac.uk/blog/?p=525) :
set in der Anwendung.Eigenschaften:
in Ihrer Anwendung Klasse:
1) setzen Sie die Eigenschaft mithilfe der @Wert annotiation
2) und fügen Sie die Bohne
sind Sie fertig!
Hier finden Sie die Liste aller Eigenschaften, die verwendet werden können in der Anwendung.Eigenschaften Datei in den Frühling starten.