日期:2014-05-16 浏览次数:20507 次
一共两个UnitTest,一个PUnit的Runner,代码如下
?
package test; import java.math.BigDecimal; import java.util.Iterator; import java.util.List; import java.util.Map; import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; //import org.springframework.jdbc.datasource.DriverManagerDataSource; import com.mchange.v2.c3p0.DriverManagerDataSource; import junit.framework.TestCase; public class InsertQueryJava extends TestCase { public void testAll() { DriverManagerDataSource ds = new DriverManagerDataSource(); // ds.setUsername("xx"); // ds.setPassword("xx"); // ds.setDriverClassName("oracle.jdbc.driver.OracleDriver"); // ds.setUrl("xx"); ds.setUser("xx"); ds.setPassword("xx"); ds.setJdbcUrl("xx"); ds.setDriverClass("oracle.jdbc.driver.OracleDriver"); SimpleJdbcTemplate tpl = new SimpleJdbcTemplate(ds); String sql1 = "insert into xxxx(a, b) values ('test', 100)"; String sql2 = "select a, b from xxxx"; tpl.update(sql1); int max = 0; List ll = tpl.queryForList(sql2); Iterator it = ll.iterator(); while(it.hasNext()){ Map item = (Map) it.next(); BigDecimal x = (BigDecimal) item.get("B"); if(x.intValue() > max) max = x.intValue(); } System.out.println(max); } }
?
?
package test import com.mchange.v2.c3p0.DriverManagerDataSource; import groovy.sql.Sql class InsertQuery extends GroovyTestCase{ void testAll(){ def p = [ url:'xx', u:'xx', p:'xx', driver:'oracle.jdbc.driver.OracleDriver' ] // def db = Sql.newInstance(p.url, p.u, p.p, p.driver) def ds = new DriverManagerDataSource() ds.setUser(p.u) ds.setPassword(p.p) ds.setJdbcUrl(p.url) ds.setDriverClass(p.driver) def db = new Sql(ds) String sql = "insert into xxxx(a, b) values ('test', 100)" String sql2 = "select a, b from xxxx" db.execute(sql) def ll = db.rows(sql2) int max = 0 for(one in ll){ if(one.b > max) max = one.b } println max // def item = ll.max{it.b} // println item.b } }
?
?
package test; import org.punit.runner.ConcurrentRunner; public class Runner { public static void main(String[] args) { int threadNum = 20; new ConcurrentRunner(threadNum).run(InsertQueryJava.class); new ConcurrentRunner(threadNum).run(InsertQuery.class); } }
?
windows下jdk1.6.20 groovy1.8.0
通过运行结果发现了几点表面现象:
?
groovy的Sql,直接newInstance比new Sql(datasource)的性能要好
c3p0的DriverManagerDataSource要比spring jdbc的DriverManagerDataSource的性能要好
都编译成class文件后groovy的性能和java的性能几乎一样
?
下面是Runner结果
?
[concurrent] Starting test.InsertQueryJava
test.InsertQueryJava
log4j:WARN No appenders could be found for logger (com.mchange.v2.log.MLog).
log4j:WARN Please initialize the log4j system properly.
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
testAll() - [4292.373611ms]
total: 1, failures:0 (GREEN) - 4331.556105ms
[concurrent] Starting test.InsertQuery
test.InsertQuery
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
testAll() - [6448.14313ms]
total: 1, failures:0 (GREEN) - 6686.467204ms
?
后面为了使得数据源连接池有个池的效果,我用了一个全局的DataSource,结果更吃惊。。groovy竟然效率更高
?
log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
[concurrent] Starting test.InsertQuery