Feder-Eigenschaften-Konfiguration mit @PropertySource
Unten In der Spring-Konfiguration-Klasse, ich bin laden der app.Eigenschaften Datei via @PropertySource und den Bau von 2 verschiedenen DBCP Datenquellen über die Konfigurationen aus den Eigenschaften der Datei.
Obwohl alles einwandfrei funktioniert, ich weiß nicht wie das deklarieren einer Variablen, die für jede Eigenschaft Konfiguration mit einer Anmerkung, um zu konstruieren, die Quelle der Daten. Ich habe versucht, zu autowire-Umgebung Klasse, wie diese
@Autowired Environment env;
Jedoch, wenn env.getProperty() gibt null zurück. Gibt es einen besseren Weg, dies zu tun?
@Configuration
@PropertySource("classpath:app.properties")
public class DAOConfig {
@Value( "${txn.dbhost}" ) private String txnDbHost;
@Value( "${txn.dbport}" ) private Integer txnDbPort;
@Value( "${txn.dbservice}" ) private String txnDbService;
@Value( "${txn.dbuser}" ) private String txnDbUser;
@Value( "${txn.dbpwd}" ) private String txnDbPwd;
@Value( "${rpt.dbhost}" ) private String rptDbHost;
@Value( "${rpt.dbport}" ) private Integer rptDbPort;
@Value( "${rpt.dbservice}" ) private String rptDbService;
@Value( "${rpt.dbuser}" ) private String rptDbUser;
@Value( "${rpt.dbpwd}" ) private String rptDbPwd;
@Bean(destroyMethod = "close")
public DataSource txnDataSource() {
return new DataSources.Builder()
.host(txnDbHost)
.port(txnDbPort)
.service(txnDbService)
.user(txnDbUser)
.pwd(txnDbPwd)
.build();
}
@Bean(destroyMethod = "close")
public DataSource rptDataSource() {
return new DataSources.Builder()
.host(rptDbHost)
.port(rptDbPort)
.service(rptDbService)
.user(rptDbUser)
.pwd(rptDbPwd)
.build();
}
}
Bearbeiten : ich nehme das zurück zu Umgebung.getProperty() funktioniert nicht. Es tatsächlich funktioniert. Ich gab den Namen der Eigenschaft falsch. Für diejenigen, die nicht verwenden möchten, Spring Boot, Sie könnte autowire Umwelt verwenden Sie es wie folgt:
@Configuration
@PropertySource("classpath:app.properties")
public class DAOConfig {
@Autowired Environment env;
@Bean(destroyMethod = "close")
public DataSource txnDataSource() {
return new DataSources.Builder()
.host(env.getProperty("txn.dbhost"))
.port(env.getProperty("txn.dbport"))
.service(env.getProperty("txn.dbservice"))
.user(env.getProperty("txn.dbuser"))
.pwd(env.getProperty("txn.dbpwd"))
.build();
}
}
Gibt es eine bessere Weise, das zu Lesen-Eigenschaften statt deklarieren alle Variablen, die mit @Value-Anmerkungen?
Schauen Sie bei der Antwort von @geoand und das ist, wie.
Ich noch nicht bekommen. Sie wollte mehr Verkapselung?
Nein, im Grunde will ich nicht zu erklären, die 10 Variablen mit @Value-annotation zum Lesen der Konfigurationen von Eigenschaften-Datei. Mit Spring Boot ConfigurationProperties, können Sie loszuwerden, die 10 Zeilen. Das macht die config-code viel mehr sauberer und lesbarer. Entschuldige mich wenn ich nicht klar mit meiner Frage.
InformationsquelleAutor MFIhsan | 2014-06-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie (oder bereit verwenden) Spring Boot, dann können Sie die
@ConfigurationProperties
annotation.Hier ist ein Beispiel aus der Spring-Boot source code:
Effektiv was dieser tut, ist anzeigen der Eigenschaften
spring.activemq.*
Ihren jeweiligen Eigenschaften.Mit der bisherigen Art von code erspart Ihnen benötigt
@Value
auf jedem Feld.Für spezielle DataSource Beispiel, die Sie zeigen, Spring-Boot-version
1.1.0.M1
bietet dieDataSourceBuilder
die@ConfigurationProperties
stark vereinfacht die Art von Konfiguration, die Sie versuchen zu erreichen. Finden Sie in der Dokumentation hierIn Ihrem Fall würde der code sein:
Überprüfen Sie meine aktualisierte Antwort! Spring Boot hat auch Sie fallen in die Falle von mehreren datasources :). Wie Sie sehen werden, aus dem link, Spring Boot macht genau das, was Sie wollen!
Das ist genau das, was ich suchte. Vielen Dank @geoand.
Ihr willkommen!
InformationsquelleAutor geoand