Ich benutze den Frühling. Ich muss Werte aus der Eigenschaftendatei lesen. Dies ist eine interne Eigenschaftendatei, nicht die externe Eigenschaftendatei. Die Eigenschaftendatei kann wie folgt aussehen.
some.properties ---file name. values are below.
abc = abc
def = dsd
ghi = weds
jil = sdd
Ich muss diese Werte nicht auf herkömmliche Weise aus der Eigenschaftendatei lesen. Wie erreicht man das? Gibt es einen neuesten Ansatz für Spring 3.0?
spring
properties-file
user1016403
quelle
quelle
Antworten:
Konfigurieren Sie PropertyPlaceholder in Ihrem Kontext:
Dann beziehen Sie sich auf die Eigenschaften in Ihren Bohnen:
BEARBEITEN: Der Code wurde aktualisiert, um die Eigenschaft mit mehreren durch Kommas getrennten Werten zu analysieren:
Wenn dies nicht funktioniert, können Sie eine Bean mit Eigenschaften definieren, injizieren und manuell verarbeiten:
und die Bohne:
quelle
aaa
? Ist es@Value(${aaa}) private String aaa;
dann können wirSystem.out.println(aaa)
???????@Value("${aaa}")
, beachten Sie die Anführungszeichen. Und ja, Sie können es drucken, außer nicht im Konstruktor, da der Konstruktor ausgeführt wird, bevor Werte eingefügt werden.Es gibt verschiedene Möglichkeiten, dasselbe zu erreichen. Im Folgenden finden Sie einige häufig verwendete Methoden für den Frühling.
Verwenden von PropertyPlaceholderConfigurer
Verwenden von PropertySource
Verwenden von ResourceBundleMessageSource
Verwenden von PropertiesFactoryBean
und viele mehr........................
Angenommen, es
ds.type
ist der Schlüssel in Ihrer Eigenschaftendatei.Verwenden von
PropertyPlaceholderConfigurer
Registrieren Sie
PropertyPlaceholderConfigurer
Bean-oder
oder
Nach der Registrierung
PropertySourcesPlaceholderConfigurer
können Sie auf den Wert zugreifen.Verwenden von
PropertySource
In der neuesten Version Frühjahr müssen Sie sich nicht registrieren
PropertyPlaceHolderConfigurer
mit@PropertySource
, fand ich eine gute Link - Version Kompatibilität : zu verstehen ,Verwenden von
ResourceBundleMessageSource
Register Bean-
Zugriffswert-
oder
Verwenden von
PropertiesFactoryBean
Register Bean-
Instanz von Wire Properties in Ihre Klasse
quelle
In der Konfigurationsklasse
quelle
app.properties
in der Produktion einfach einen anderen Test verwenden? Mit anderen Worten, würde ein Teil Ihres Bereitstellungsprozesses darin bestehen, durchapp.properties
Produktionswerte zu ersetzen ?Hier ist eine zusätzliche Antwort, die mir auch sehr geholfen hat, die Funktionsweise zu verstehen: http://www.javacodegeeks.com/2013/07/spring-bean-and-propertyplaceholderconfigurer.html
quelle
PropertySourcesPlaceholderConfigurer
Bean explizit mit@PropertySource
@PropertySource
.Wenn Sie eine Eigenschaftendatei manuell lesen müssen, ohne @Value zu verwenden.
Vielen Dank für die gut geschriebene Seite von Lokesh Gupta: Blog
quelle
Sie müssen eine PropertyPlaceholderConfigurer-Bean in Ihren Anwendungskontext einfügen und deren Positionseigenschaft festlegen.
Details finden Sie hier: http://www.zparacha.com/how-to-read-properties-file-in-spring/
Möglicherweise müssen Sie Ihre Eigenschaftendatei ein wenig ändern, damit dies funktioniert.
Ich hoffe es hilft.
quelle
Eine andere Möglichkeit ist die Verwendung eines ResourceBundle . Grundsätzlich erhalten Sie das Bundle mit seinem Namen ohne die '.properties'
Und Sie stellen jeden Wert wieder her:
quelle
quelle
Ich empfehle, diesen Link https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html aus SpringBoot-Dokumenten über das Injizieren externer Konfigurationen zu lesen. Sie sprachen nicht nur über das Abrufen aus einer Eigenschaftendatei, sondern auch über YAML- und sogar JSON-Dateien. Ich fand es hilfreich. Ich hoffe du auch.
quelle
Ich wollte eine Utility - Klasse , die nicht durch die Feder geführt wird, so dass keine Feder Anmerkungen wie
@Component
,@Configuration
etc. Aber ich die Klasse wollte zum Lesenapplication.properties
Ich habe es geschafft, es zum Laufen zu bringen, indem ich die Klasse dazu gebracht habe, sich des Frühlingskontexts bewusst zu werden, daher bewusst zu sein
Environment
und daherenvironment.getProperty()
wie erwartet zu arbeiten.Um es explizit zu sagen, ich habe:
application.properties
Utils.java
ApplicationContextProvider.java (siehe Spring, aktuellen ApplicationContext abrufen )
quelle