diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSourceFactory.java b/src/main/java/com/alibaba/druid/pool/DruidDataSourceFactory.java index 3e1274adbf..a7758d9fbc 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSourceFactory.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSourceFactory.java @@ -285,12 +285,15 @@ public class DruidDataSourceFactory implements ObjectFactory { value = (String) properties.get(PROP_POOLPREPAREDSTATEMENTS); if (value != null) { - dataSource.setPoolPreparedStatements(Boolean.valueOf(value).booleanValue()); - } - - value = (String) properties.get(PROP_MAXOPENPREPAREDSTATEMENTS); - if (value != null) { - dataSource.setMaxOpenPreparedStatements(Integer.parseInt(value)); + boolean poolPreparedStatements = Boolean.valueOf(value).booleanValue(); + dataSource.setPoolPreparedStatements(poolPreparedStatements); + + if (poolPreparedStatements) { + value = (String) properties.get(PROP_MAXOPENPREPAREDSTATEMENTS); + if (value != null) { + dataSource.setMaxOpenPreparedStatements(Integer.parseInt(value)); + } + } } value = (String) properties.get(PROP_FILTERS); diff --git a/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFactoryTest.java b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFactoryTest.java index 61f0872e14..dcf15937de 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFactoryTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFactoryTest.java @@ -21,9 +21,10 @@ import javax.naming.Reference; import javax.naming.StringRefAddr; import javax.sql.DataSource; -import junit.framework.Assert; import junit.framework.TestCase; +import org.junit.Assert; + import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; import com.alibaba.druid.util.JdbcUtils; diff --git a/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFactoryTest2.java b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFactoryTest2.java new file mode 100644 index 0000000000..b9f23f5e36 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFactoryTest2.java @@ -0,0 +1,30 @@ +package com.alibaba.druid.bvt.pool; + +import java.util.Properties; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.pool.DruidDataSourceFactory; +import com.alibaba.druid.util.JdbcUtils; + +public class DruidDataSourceFactoryTest2 extends TestCase { + + private DruidDataSource dataSource; + + protected void tearDown() throws Exception { + JdbcUtils.close(dataSource); + } + + public void test_factory() throws Exception { + Properties properties = new Properties(); + properties.put(DruidDataSourceFactory.PROP_POOLPREPAREDSTATEMENTS, "false"); + properties.put(DruidDataSourceFactory.PROP_MAXOPENPREPAREDSTATEMENTS, "100"); + + dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); + + Assert.assertFalse(dataSource.isPoolPreparedStatements()); + } +}