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 Grunde server.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). Aber ServerProperties keinen documentRoot (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.
InformationsquelleAutor zeodtr | 2013-11-19
Schreibe einen Kommentar