parent
695b3917b2
commit
cb6739b4a5
|
|
@ -55,6 +55,12 @@ public abstract class AbstractDataSourceConfiguration implements BeanClassLoader
|
|||
|
||||
private boolean testOnReturn = false;
|
||||
|
||||
private boolean testWhileIdle = false;
|
||||
|
||||
private int timeBetweenEvictionRunsMillis = getDefaultTimeBetweenEvictionRunsMillis();
|
||||
|
||||
private int minEvictableIdleTimeMillis = getDefaultMinEvictableIdleTimeMillis();
|
||||
|
||||
private ClassLoader classLoader;
|
||||
|
||||
private EmbeddedDatabaseConnection embeddedDatabaseConnection = EmbeddedDatabaseConnection.NONE;
|
||||
|
|
@ -164,6 +170,18 @@ public abstract class AbstractDataSourceConfiguration implements BeanClassLoader
|
|||
this.testOnReturn = testOnReturn;
|
||||
}
|
||||
|
||||
public void setTestWhileIdle(boolean testWhileIdle) {
|
||||
this.testWhileIdle = testWhileIdle;
|
||||
}
|
||||
|
||||
public void setTimeBetweenEvictionRunsMillis(int timeBetweenEvictionRunsMillis) {
|
||||
this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
|
||||
}
|
||||
|
||||
public void setMinEvictableIdleTimeMillis(int minEvictableIdleTimeMillis) {
|
||||
this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
|
||||
}
|
||||
|
||||
public int getInitialSize() {
|
||||
return this.initialSize;
|
||||
}
|
||||
|
|
@ -192,4 +210,16 @@ public abstract class AbstractDataSourceConfiguration implements BeanClassLoader
|
|||
return this.testOnReturn;
|
||||
}
|
||||
|
||||
protected boolean isTestWhileIdle() {
|
||||
return this.testWhileIdle;
|
||||
}
|
||||
|
||||
protected int getTimeBetweenEvictionRunsMillis() { return this.timeBetweenEvictionRunsMillis; }
|
||||
|
||||
protected int getMinEvictableIdleTimeMillis() { return this.minEvictableIdleTimeMillis; }
|
||||
|
||||
protected abstract int getDefaultTimeBetweenEvictionRunsMillis();
|
||||
|
||||
protected abstract int getDefaultMinEvictableIdleTimeMillis();
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import javax.sql.DataSource;
|
|||
import org.apache.commons.dbcp.BasicDataSource;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.commons.pool.impl.GenericObjectPool;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.dao.DataAccessResourceFailureException;
|
||||
|
|
@ -66,7 +67,11 @@ public class CommonsDataSourceConfiguration extends AbstractDataSourceConfigurat
|
|||
this.pool.setMinIdle(getMinIdle());
|
||||
this.pool.setTestOnBorrow(isTestOnBorrow());
|
||||
this.pool.setTestOnReturn(isTestOnReturn());
|
||||
this.pool.setTestWhileIdle(isTestWhileIdle());
|
||||
this.pool.setTimeBetweenEvictionRunsMillis(getTimeBetweenEvictionRunsMillis());
|
||||
this.pool.setMinEvictableIdleTimeMillis(getMinEvictableIdleTimeMillis());
|
||||
this.pool.setValidationQuery(getValidationQuery());
|
||||
|
||||
return this.pool;
|
||||
}
|
||||
|
||||
|
|
@ -75,12 +80,20 @@ public class CommonsDataSourceConfiguration extends AbstractDataSourceConfigurat
|
|||
if (this.pool != null) {
|
||||
try {
|
||||
this.pool.close();
|
||||
}
|
||||
catch (SQLException ex) {
|
||||
} catch (SQLException ex) {
|
||||
throw new DataAccessResourceFailureException(
|
||||
"Could not close data source", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getDefaultTimeBetweenEvictionRunsMillis() {
|
||||
return (int) GenericObjectPool.DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getDefaultMinEvictableIdleTimeMillis() {
|
||||
return (int) GenericObjectPool.DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,6 +51,9 @@ public class TomcatDataSourceConfiguration extends AbstractDataSourceConfigurati
|
|||
this.pool.setMinIdle(getMinIdle());
|
||||
this.pool.setTestOnBorrow(isTestOnBorrow());
|
||||
this.pool.setTestOnReturn(isTestOnReturn());
|
||||
this.pool.setTestWhileIdle(isTestWhileIdle());
|
||||
this.pool.setTimeBetweenEvictionRunsMillis(getTimeBetweenEvictionRunsMillis());
|
||||
this.pool.setMinEvictableIdleTimeMillis(getMinEvictableIdleTimeMillis());
|
||||
this.pool.setValidationQuery(getValidationQuery());
|
||||
return this.pool;
|
||||
}
|
||||
|
|
@ -62,4 +65,13 @@ public class TomcatDataSourceConfiguration extends AbstractDataSourceConfigurati
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getDefaultTimeBetweenEvictionRunsMillis() {
|
||||
return 5000;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getDefaultMinEvictableIdleTimeMillis() {
|
||||
return 60000;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,9 +18,13 @@ package org.springframework.boot.autoconfigure.jdbc;
|
|||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.apache.commons.dbcp.BasicDataSource;
|
||||
import org.apache.commons.pool.impl.GenericObjectPool;
|
||||
import org.junit.Test;
|
||||
import org.springframework.boot.test.EnvironmentTestUtils;
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
/**
|
||||
|
|
@ -40,4 +44,32 @@ public class CommonsDataSourceConfigurationTests {
|
|||
this.context.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDataSourcePropertiesOverridden() throws Exception {
|
||||
this.context.register(CommonsDataSourceConfiguration.class);
|
||||
EnvironmentTestUtils.addEnvironment(this.context, "spring.datasource.url:jdbc:foo//bar/spam");
|
||||
EnvironmentTestUtils.addEnvironment(this.context, "spring.datasource.testWhileIdle:true");
|
||||
EnvironmentTestUtils.addEnvironment(this.context, "spring.datasource.testOnBorrow:true");
|
||||
EnvironmentTestUtils.addEnvironment(this.context, "spring.datasource.testOnReturn:true");
|
||||
EnvironmentTestUtils.addEnvironment(this.context, "spring.datasource.timeBetweenEvictionRunsMillis:10000");
|
||||
EnvironmentTestUtils.addEnvironment(this.context, "spring.datasource.minEvictableIdleTimeMillis:12345");
|
||||
this.context.refresh();
|
||||
BasicDataSource ds = this.context.getBean(BasicDataSource.class);
|
||||
assertEquals("jdbc:foo//bar/spam", ds.getUrl());
|
||||
assertEquals(true, ds.getTestWhileIdle());
|
||||
assertEquals(true, ds.getTestOnBorrow());
|
||||
assertEquals(true, ds.getTestOnReturn());
|
||||
assertEquals(10000, ds.getTimeBetweenEvictionRunsMillis());
|
||||
assertEquals(12345, ds.getMinEvictableIdleTimeMillis());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDataSourceDefaultsPreserved() throws Exception {
|
||||
this.context.register(CommonsDataSourceConfiguration.class);
|
||||
this.context.refresh();
|
||||
BasicDataSource ds = this.context.getBean(BasicDataSource.class);
|
||||
assertEquals(GenericObjectPool.DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS, ds.getTimeBetweenEvictionRunsMillis());
|
||||
assertEquals(GenericObjectPool.DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS, ds.getMinEvictableIdleTimeMillis());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,12 +56,29 @@ public class TomcatDataSourceConfigurationTests {
|
|||
@Test
|
||||
public void testDataSourcePropertiesOverridden() throws Exception {
|
||||
this.context.register(TomcatDataSourceConfiguration.class);
|
||||
EnvironmentTestUtils.addEnvironment(this.context,
|
||||
"spring.datasource.url:jdbc:foo//bar/spam");
|
||||
EnvironmentTestUtils.addEnvironment(this.context, "spring.datasource.url:jdbc:foo//bar/spam");
|
||||
EnvironmentTestUtils.addEnvironment(this.context, "spring.datasource.testWhileIdle:true");
|
||||
EnvironmentTestUtils.addEnvironment(this.context, "spring.datasource.testOnBorrow:true");
|
||||
EnvironmentTestUtils.addEnvironment(this.context, "spring.datasource.testOnReturn:true");
|
||||
EnvironmentTestUtils.addEnvironment(this.context, "spring.datasource.timeBetweenEvictionRunsMillis:10000");
|
||||
EnvironmentTestUtils.addEnvironment(this.context, "spring.datasource.minEvictableIdleTimeMillis:12345");
|
||||
this.context.refresh();
|
||||
assertEquals("jdbc:foo//bar/spam",
|
||||
this.context.getBean(org.apache.tomcat.jdbc.pool.DataSource.class)
|
||||
.getUrl());
|
||||
org.apache.tomcat.jdbc.pool.DataSource ds = this.context.getBean(org.apache.tomcat.jdbc.pool.DataSource.class);
|
||||
assertEquals("jdbc:foo//bar/spam", ds.getUrl());
|
||||
assertEquals(true, ds.isTestWhileIdle());
|
||||
assertEquals(true, ds.isTestOnBorrow());
|
||||
assertEquals(true, ds.isTestOnReturn());
|
||||
assertEquals(10000, ds.getTimeBetweenEvictionRunsMillis());
|
||||
assertEquals(12345, ds.getMinEvictableIdleTimeMillis());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDataSourceDefaultsPreserved() throws Exception {
|
||||
this.context.register(TomcatDataSourceConfiguration.class);
|
||||
this.context.refresh();
|
||||
org.apache.tomcat.jdbc.pool.DataSource ds = this.context.getBean(org.apache.tomcat.jdbc.pool.DataSource.class);
|
||||
assertEquals(5000, ds.getTimeBetweenEvictionRunsMillis());
|
||||
assertEquals(60000, ds.getMinEvictableIdleTimeMillis());
|
||||
}
|
||||
|
||||
@Test(expected = BeanCreationException.class)
|
||||
|
|
|
|||
Loading…
Reference in New Issue