2017-01-20 4 views
6

in meinem Zielordner lesen, gibt es 2 Ordner, lib und conf. Alle Eigenschaftendateien werden im conf-Ordner abgelegt und die jars werden im lib foulder platziert.Spring Boot, wie Eigenschaften Datei außerhalb jar

vorherige Boot zu springen, verwenden wir folgende Konfiguration in spring.xml @value

<context:property-placeholder location="classpath*:*.properties"/> 

und in Java-Code zu verwenden, wie:

@Value("${name}") 

private String name; 

aber im Frühjahr Boot, habe ich nicht weiß, wie man dasselbe in Java-Code macht.

i folgende haben versucht, aber die Arbeit nicht

@Configuration 
@PropertySource(value = "classpath:aaa.properties") 
public class AppConfig { 
    @Bean 
    public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
    return new PropertySourcesPlaceholderConfigurer(); 
    } 
} 

Antwort

13

Ich bin ein wenig verwirrt durch den Titel der Frage und die Beschreibung lesen. Hoffentlich werde ich Sie nicht noch mehr mit meinen Kommentaren verwirren.

Im Allgemeinen ist Spring Boot sehr über Projektstruktur sowie die binäre erstellt. Der empfohlene Weg (Spring-Boot-Meinung) besteht darin, ein Glas mit allen Abhängigkeiten darin zu bauen (Fettglas). Wenn Sie Konfigurationseigenschaften benötigen, die außerhalb Ihres Fat-Jars definiert sind (oder Krieg, wenn Sie das erstellt haben), bietet Spring Boot viele Optionen (siehe Referenz 1). Ich mag meine apps Punkt in eine externe Datei mit der Flagge (spring.config.location), die mit einer Systemeigenschaft festgelegt werden können:

java -jar -Dspring.config.location=<path-to-file> myBootProject.jar 

Beachten Sie, dass Sie etwas ähnliches durch eine Umgebungsvariable mit tun können, zu definieren, wo Ihre externe Datei lebt.

Ich hoffe, das hilft!

Referenzen: 1. https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

+0

Dank dieses Angebot großen Wert –

+0

Sie, wenn ich mehrfach Eigenschaften Dateien haben, wissen Sie, wie es in separaten Konfigurations Klasse zu lesen? –

+0

Beziehen Sie sich auf mehrere externe Dateien? – Alberto

1

eine Lösung gefunden:

zuerst eine Klasse erstellen und an Orten

@ConfigurationProperties(prefix = "asdf", locations = "file:conf/aaa.properties") 
public class ASDF { 
    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

Bitte beachten, @ConfigurationProperties hinzuzufügen, verwenden Sie i-Datei , nicht Klassenpfad.

dann in Ihrer Anwendungsklasse, fügen @EnableConfigurationProperties

@SpringBootApplication 
@EnableConfigurationProperties({ASDF.class, BBB.class}) 
public class InitialBeanTestApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(InitialBeanTestApplication.class, args); 
    } 
} 

dann können Sie config-Datei im Ordner conf

0

eine andere Lösung gefunden.

Setzen Sie jede Konfiguration in eine application.properties-Datei und lesen Sie im Code @Value ("$ {name}").

und verwenden Sie eine Assembly-Datei, um die Datei der Ressourcenordner in den Zielkonfigurationsordner zu kopieren.

und nach der Bereitstellung muss nur die Datei application.properties im Konfigurationsordner geändert und die Anwendung ausgeführt werden.

dies, weil Spring-Boot-Datei application.properties in Folge lesen.

• Der/config Unterverzeichnis im aktuellen Verzeichnis befindet

• Das aktuelle Verzeichnis

• Ein Classpath/config Paket

• Die Classpath Wurzel

aber das funktioniert für eine Eigenschaften Datei. nicht für multiple Eigenschaften Dateien

4

Ich bin mir nicht sicher, ob Sie mit der gleichen Situation als ich beschäftigen, aber in meinem Fall habe ich ein Glas und eine * .properties-Datei außerhalb davon. Was ich tat, die PROPERTIES-Datei außerhalb des jar gelegen zu bekommen war die nächste:

@Configuration 
public class ApplicationContext { 

    @Bean 
    public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
    PropertySourcesPlaceholderConfigurer properties = new PropertySourcesPlaceholderConfigurer(); 
    properties.setLocation(new FileSystemResource("application.properties")); 
    properties.setIgnoreResourceNotFound(false); 

    return properties; 
    } 
} 

Wenn ich die Position der application.properties bin Einstellungsdatei erstellt ich FileSystemResource Objekt, das ich die properties.files bekommen erlauben welches sich neben dem Glas befindet. Wenn sich Ihre Dateien .properties im Klassenpfad befinden, können Sie beispielsweise andere Klassen (z. B. ClassPathResource) verwenden. Sie können andere Klassen lesen, die Spring anbietet, um ein Resource-Objekt unter dem Paket org.springframework.core.io zu erhalten..

Ich hoffe, dieser Kommentar hilft.

+0

Dies scheint eine vielseitige Lösung zu sein.Wenn Sie mehrere Standorte mit der Methode 'setLocations' festlegen möchten. – SashikaXP

1

Wie in der Spring Boot docs, erwähnt

SpringApplication lädt Eigenschaften von application.properties Dateien in den folgenden Orten und fügen Sie sie zum Frühling Umwelt:

  1. A/config Unterverzeichnis des aktuellen Verzeichnis.
  2. Das aktuelle Verzeichnis
  3. A classpath/config Paket
  4. Die classpath root

Die Liste nach Rangfolge geordnet ist (Eigenschaften in Positionen höher in der Liste definiert diejenigen in niedrigeren Positionen definiert überschreiben).

Eine Möglichkeit besteht darin, einfach das Verzeichnis 'conf' in 'config' umzubenennen und es wird ohne Probleme funktionieren. Sie müssen also keine zusätzliche Konfiguration vornehmen, bis Sie Ihre Eigenschaftendatei an einem anderen Ort als den oben genannten verwenden möchten.

In diesem Fall können Sie die Eigenschaft Quelle explizit definieren.

@PropertySource("classpath:config.properties") 

und für mehrere Eigenschaftsdatei

@PropertySources({ 
    @PropertySource("classpath:config.properties"), 
    @PropertySource("classpath:logging.properties"), 
    @PropertySource(value="classpath:missing.properties", ignoreResourceNotFound=true) 
}) 
Verwandte Themen