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();
    }

}
Besser, wie? Was Sie erwartet oder erhofft haben?
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

Schreibe einen Kommentar