[JAVA] Ich möchte die Eigenschaftendatei mit einem anderen Dateinamen als application.yml oder application- [Profilname] .yml mit Spring Boot lesen

Das ist ziemlich gut! Ich konnte die Probe nicht finden, machen Sie sich also eine Notiz.

Was ich machen wollte

In einer Konfiguration mit mehreren Projekten wollte ich eine Eigenschaftendatei auf der Projektseite platzieren, auf der gemeinsame Teile gesammelt wurden. In application.yml musste jedoch ein anderer Name verwendet werden, da die Eigenschaftendatei auf der Benutzerseite angezeigt wurde.

Realisierungsmethode

Punkt

Quellcode

Der vollständige Quellcode finden Sie hier [https://github.com/h-okhs/SpringPropertySourceExample]

Konfigurationsklasse

Geben Sie die Klasse zum Lesen von Yaml mit factory von @ PropertySource an.

FooConfig.java


@Configuration
@ConfigurationProperties(prefix = "foo")
@Component
@PropertySource(value = {"classpath:/foo-config.yml",
    "classpath:/foo-config-${spring.profiles.active}.yml"},
    factory = YamlPropertySourceFactory.class)
@Data
public class FooConfig {

    private BarConfig bar;
    private BazConfig baz;

    @Data
    public static class BarConfig {
        private String setting1;
    }

    @Data
    public static class BazConfig {
        private String setting1;
        private String setting2;
    }
}

Fabrikklasse

Quelle von irgendwo entlehnt. Es scheint, dass Yaml, das mit Spring's "YamlPropertiesFactoryBean" geladen wurde, in "Properties" konvertiert und als "PropertySource" zurückgegeben wird.

YamlPropertySourceFactory.java


public class YamlPropertySourceFactory implements PropertySourceFactory {

    @Override
    public PropertySource<?> createPropertySource(@Nullable String name, EncodedResource resource)
        throws IOException {
        Properties propertiesFromYaml = loadYamlIntoProperties(resource);
        String sourceName = name != null ? name : resource.getResource().getFilename();
        return new PropertiesPropertySource(sourceName, propertiesFromYaml);
    }

    private static Properties loadYamlIntoProperties(EncodedResource resource)
        throws FileNotFoundException {
        try {
            YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
            factory.setResources(resource.getResource());
            factory.afterPropertiesSet();
            return factory.getObject();
        } catch (IllegalStateException e) {
            Throwable cause = e.getCause();
            if (cause instanceof FileNotFoundException) {
                throw (FileNotFoundException) e.getCause();
            }
            throw e;
        }
    }
}

Funktionsprüfung

SpringPropertySourceTest.java


@SpringBootTest
@ActiveProfiles("test")
public class SpringPropertySourceTest {

    @Autowired
    FooConfig fooConfig;

    @Test
    public void test() {
        assertThat(fooConfig.getBar().getSetting1()).isEqualTo("barbar1");
        assertThat(fooConfig.getBaz().getSetting2()).isEqualTo("bazbaz2");

    }
}

Bonus

Mit SpringBoot 2.3.0 oder höher kann @ PropertySources $ {spring.profiles.active} nicht behoben werden und es tritt ein Fehler auf. Ich habe es in einem anderen Artikel geschrieben. (Ich habe deswegen viel Zeit gegessen ...)

Fehler beim Auflösen des Platzhalters, der für den Wert von @PropertySource in SpringBoot 2.3.0 und höher verwendet wurde

Recommended Posts

Ich möchte die Eigenschaftendatei mit einem anderen Dateinamen als application.yml oder application- [Profilname] .yml mit Spring Boot lesen
[Spring Boot] Ich möchte meine eigene Eigenschaftendatei hinzufügen und den Wert mit env.getProperty () abrufen.
[Spring Boot] So verweisen Sie auf die Eigenschaftendatei
Ich möchte in der Lage sein, Dateien mit refile mit administrate [rails6] zu lesen.
Ich habe versucht, eine Webanwendung voller Fehler mit Spring Boot zu klonen
Ich möchte eine bestimmte Datei mit WatchService überwachen
Wovon ich süchtig war, als ich eine Spring Boot-Anwendung mit VS Code entwickelte
Schneiden Sie SQL in die Eigenschaftendatei mit jdbcTemplate von Spring Boot aus
Ich möchte eine andere Desinfektionsmethode als Ansicht verwenden.
Ich möchte dem select-Attribut einen Klassennamen geben
Ich möchte die maximale Dateigröße für das Hochladen von Dateien für jede URL in Spring Boot steuern
Lesen Sie die Datei unter dem Klassenpfad als Zeichenfolge mit spring
Ich möchte die Standardfehlermeldung von Spring Boot steuern
Ich möchte eine Datei mit Ruby im Internet herunterladen und lokal speichern (mit Vorsicht).
Schritte zum Ausführen von Spring Boot beziehen sich auf die Werte in der Eigenschaftendatei
Ich habe Docker verwendet, um die Vorlage zu verfestigen, die mit Spring Boot entwickelt werden soll.
Ich möchte eine Webanwendung entwickeln!
Ich möchte eine Liste nur eindeutiger Zeichenfolgen erhalten, indem feste Zeichenfolgen vom Dateinamen ausgeschlossen werden
Lassen Sie uns eine TODO-Anwendung mit Java 2 erstellen. Ich möchte eine Vorlage mit Spring Initializr erstellen und eine Hello-Welt erstellen
03. Ich habe eine Anfrage von Spring Boot an die Postleitzahlensuch-API gesendet
Melden Sie sich bei Spring Boot-Webanwendungen auf der Microsoft ID-Plattform an
So legen Sie Umgebungsvariablen in der Eigenschaftendatei der Spring-Boot-Anwendung fest
Vom Erstellen eines Spring Boot-Projekts bis zum Ausführen einer Anwendung mit VS Code
So binden Sie mit einer Eigenschaftendatei in Spring Boot
Ich wollte Spring Boot in einem Multiprojekt gradle
Beachten Sie, dass ich süchtig nach Stapelverarbeitung mit Spring Boot war
Beim Hochladen einer Datei mit Spring Boot wird eine Fehlerbehandlung durchgeführt, wenn die maximale Dateigröße überschritten wird.
Ich habe versucht, das Hochladen von Dateien mit Spring MVC zu implementieren
[Spring] Lesen Sie mit MessageSource eine Nachricht aus einer YAML-Datei
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
Ich möchte den Namen des Posters des Kommentars anzeigen
Ich möchte den Dunkelmodus mit der SWT-App verwenden
Ich habe jetzt einen Test mit Spring Boot + JUnit 5 geschrieben
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
Ich möchte eine Liste des Inhalts einer Zip-Datei und ihrer unkomprimierten Größe erhalten
Implementierung einer starken API für "Ich möchte ~~ auf dem Bildschirm anzeigen" mit einfachem CQRS
Ich möchte mit Java8 StreamAPI redu () einen anderen Typ als das Eingabeelement zurückgeben.
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
Ich möchte Tomcat auf den Server bringen und die Anwendung starten
Die erste WEB-Anwendung mit Spring Boot-Making a Pomodoro Timer-
Eine Geschichte voller Grundlagen von Spring Boot (gelöst)
Ich möchte eine Liste mit Kotlin und Java erstellen!
[Java] Stellen Sie die Spring Boot-Anwendung für den Azure App Service bereit
Ich möchte eine Methode aufrufen und die Nummer zählen
Stellen Sie die von Spring Boot erstellte Anwendung für Heroku (öffentlich) bereit ②
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
Stellen Sie die von Spring Boot erstellte Anwendung für Heroku (öffentlich) bereit ①
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ich möchte eine Parkettdatei auch in Ruby erstellen
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
Ich möchte den Startbefehl mit Docker-Compose an Postgres übergeben.
Was ist mit dem Fehler "Kann nicht gelesen werden oder ist keine gültige ZIP-Datei?" Zu tun
Ich möchte die Methode des Controllers kennen, bei der die Ausnahme im ExceptionHandler von Spring Boot ausgelöst wurde