Wir verwenden den folgenden Code, um Spring Beans Eigenschaften aus einer Eigenschaftendatei zu injizieren.
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:/my.properties"/>
</bean>
<bean id="blah" class="abc">
<property name="path" value="${the.path}"/>
</bean>
Gibt es eine Möglichkeit, programmgesteuert auf die Eigenschaften zuzugreifen? Ich versuche, Code ohne Abhängigkeitsinjektion zu erstellen. Ich möchte also nur einen Code wie diesen haben:
PropertyPlaceholderConfigurer props = new PropertyPlaceholderConfigurer();
props.load("classpath:/my.properties");
props.get("path");
spring
properties
Marcus Leon
quelle
quelle
Antworten:
Wie wäre es mit PropertiesLoaderUtils ?
quelle
PropertyPlaceholderConfigurer
, obwohl es für die Aufgabe übertrieben ist.Wenn Sie nur über den Code auf den Platzhalterwert zugreifen möchten, gibt es die
@Value
Anmerkung:So greifen Sie über SPEL auf Platzhalter zu: Verwenden Sie diese Syntax:
Verwenden Sie diesen Trick, um die Konfiguration für Ansichten bereitzustellen, bei denen SPEL deaktiviert ist:
Verwenden Sie dann den Exposer, um Eigenschaften für eine Ansicht verfügbar zu machen:
Verwenden Sie dann in der Ansicht die belichteten Eigenschaften wie folgt:
Diese Lösung hat den Vorteil, dass Sie sich auf die Standardimplementierung von Platzhaltern verlassen können, die durch den Kontext eingefügt wird: Eigenschaft-Platzhalter-Tag.
Wenn Sie abschließend wirklich alle Platzhalter-Eigenschaften und ihre Werte erfassen möchten, müssen Sie sie über StringValueResolver leiten, um sicherzustellen, dass Platzhalter wie erwartet innerhalb der Eigenschaftswerte funktionieren. Der folgende Code wird das tun.
quelle
CREDIT : Programmatischer Zugriff auf Eigenschaften in Spring, ohne die Eigenschaftendatei erneut zu lesen
Ich habe eine gute Implementierung gefunden, um im Frühjahr programmgesteuert auf die Eigenschaften zuzugreifen, ohne die gleichen Eigenschaften neu zu laden, die der Frühling bereits geladen hat. [Außerdem ist es nicht erforderlich, den Speicherort der Eigenschaftendatei in der Quelle fest zu codieren.]
Mit diesen Änderungen sieht der Code sauberer und wartbarer aus.
Das Konzept ist ziemlich einfach. Erweitern Sie einfach den Platzhalter für die Spring-Standardeigenschaft (PropertyPlaceholderConfigurer) und erfassen Sie die Eigenschaften, die in die lokale Variable geladen werden
Anwendungsbeispiel
Änderungen der Federkonfiguration
Hoffe, dies hilft, die Probleme zu lösen, die Sie haben
quelle
Ich habe das getan und es hat funktioniert.
Das sollte funktionieren.
quelle
Sie können auch entweder die Spring Utils verwenden oder Eigenschaften über die PropertiesFactoryBean laden.
oder:
Dann können Sie sie in Ihrer Bewerbung abholen mit:
und verwenden Sie zusätzlich diese Eigenschaften in Ihrer Konfiguration:
Dies steht auch in den Dokumenten: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#xsd-config-body-schemas-util-properties
quelle
Erstellen Sie eine Klasse wie unten
Dann, wo immer Sie auf eine Immobilie zugreifen möchten
- Schreiben Sie Getter und Setter in die Accessor-Klasse
quelle
Wie Sie wissen, verwenden die neueren Versionen von Spring den PropertyPlaceholderConfigurer nicht und verwenden jetzt ein anderes albtraumhaftes Konstrukt namens PropertySourcesPlaceholderConfigurer. Wenn Sie versuchen, aufgelöste Eigenschaften aus Code zu erhalten, und möchten, dass das Spring-Team uns vor langer Zeit eine Möglichkeit dazu gegeben hat, stimmen Sie diesen Beitrag ab! ... weil du es so machst:
Unterklasse PropertySourcesPlaceholderConfigurer:
Stellen Sie zur Verwendung sicher, dass Sie Ihre Unterklasse in Ihrer @Configuration verwenden, und speichern Sie einen Verweis darauf für die spätere Verwendung.
Verwendung:
quelle
Hier ist ein weiteres Beispiel.
quelle
Das hilft mir:
quelle
Dadurch werden alle verschachtelten Eigenschaften aufgelöst.
quelle
Sie können Ihre Eigenschaften durch
Environment
Klasse erhalten. Wie die Dokumentation steht:Wenn Sie Environment als
env
Variable haben, rufen Sie einfach Folgendes auf:Sie können Ihre "rohen" Eigenschaften erhalten durch:
Es werden alle Eigenschaftenquellen durchsucht, die der Frühling registriert hat.
Sie können die Umgebung entweder erhalten über:
ApplicationContextAware
und dann aufrufengetEnvironment()
Kontext aufEnvironmentAware
.Dies wird durch die Implementierung einer Klasse erreicht, da Eigenschaften in einem frühen Stadium des Anwendungsstarts aufgelöst werden, da sie möglicherweise für die Bean-Konstruktion erforderlich sind.
Lesen Sie mehr zur Dokumentation: spring Umgebungsdokumentation
quelle
In diesem Beitrag wird auch erläutert, wie Sie auf Eigenschaften zugreifen können: http://maciej-miklas.blogspot.de/2013/07/spring-31-programmatic-access-to.html
Sie können auf Eigenschaften zugreifen, die von spring property-placeholder über eine solche Spring Bean geladen wurden:
quelle
in servlet-context.xml danach können Sie Ihre Datei überall direkt verwenden
quelle
Verwenden Sie den folgenden Code in Ihrer Spring-Konfigurationsdatei, um die Datei aus dem Klassenpfad Ihrer Anwendung zu laden
quelle
Dies ist der beste Weg, wie ich es zum Laufen gebracht habe:
quelle