2017-06-19 22 views
0

考慮彈簧啓動與spring-boot-starter-jdbc,你想有一個或多個數據源,其中有一個自定義前綴的屬性名稱。從我看到的org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration看來,在我看來,自動配置只能與默認前綴spring.datasource一起使用,但只要您修改它,您將自行設置關於池的屬性。如何在Spring Boot中使用自定義前綴配置數據庫配置連接池?

有人可以請說明如何配置Tomcat JDBC池數據源更優雅(閱讀春季慣用)?

當前解決方法:

@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; 
    } 
} 

回答

0

其實這竟然是相當直接的感謝春天啓動的ConfigurationProperties註釋的綁定功能,可以直接填寫在下面的JDBC連接池屬性因此避免了每個房產本身繁瑣的初始化:

@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; 
} 
相關問題