2017-06-19 1 views
0

Betrachten Sie Spring Boot mit spring-boot-starter-jdbc und dass Sie eine oder mehrere Datenquellen haben möchten, die in ihren Eigenschaftsnamen ein benutzerdefiniertes Präfix haben. Von dem, was ich in org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration sehe, sieht es für mich aus, dass die automatische Konfiguration nur mit dem Standard-Präfix spring.datasource verwendet werden kann, aber sobald Sie es ändern, werden Sie auf eigene Faust die Eigenschaften in Bezug auf Pooling einrichten.Wie konfiguriert man Datenbankverbindungspooling mit benutzerdefiniertem Präfix in Spring Boot?

Kann jemand bitte erklären, wie man die Tomcat JDBC Pool DataSource eleganter konfiguriert (lesen Spring idiomatic)?

Aktuelle Arbeit um:

@Configuration 
public class DatabaseConfiguration { 

    @Value("${datasource.api.tomcat.maxWait:5000}") 
    private int maxWaitMillis; 

    @Value("${datasource.api.tomcat.test-on-borrow:true}") 
    private boolean testOnBorrow; 

    @Value("${datasource.api.tomcat.validation-query:SELECT 1}") 
    private String validationQuery; 

    @Bean(name = "apiDataSource") 
    @ConfigurationProperties(prefix = "datasource.api") 
    public DataSource apiDataSource() { 
     DataSource ds = DataSourceBuilder.create().build(); 
     // Assume we make use of Apache Tomcat connection pooling (default in Spring Boot) 
     org.apache.tomcat.jdbc.pool.DataSource tds = (org.apache.tomcat.jdbc.pool.DataSource) ds; 
     tds.setTestOnBorrow(testOnBorrow); 
     tds.setValidationQuery(validationQuery); 
     tds.setMaxWait(maxWaitMillis); 
     return ds; 
    } 
} 

Antwort

0

Eigentlich stellte sich ziemlich geradlinig durch die Funktion Bindung an der Frühlings-Stiefel ist ConfigurationProperties Annotation heraus, Sie können direkt die JDBC-Verbindungspool Eigenschaften in der folgenden bevöl Mode und vermeiden Sie daher die umständliche Initialisierung jeder Eigenschaft für sich:

@Bean 
@ConfigurationProperties(prefix = "datasource.api") 
public PoolProperties apiPoolProperties() { 
    return new org.apache.tomcat.jdbc.pool.PoolProperties(); 
} 

@Bean(name = "apiDataSource") 
public DataSource apiDataSource(@Qualifier("apiPoolProperties") PoolProperties poolProperties) { 
    DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource(poolProperties); 
    logger.info("Initialized API Datasource: {}", ds); 
    return ds; 
} 
Verwandte Themen