|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。
比来,同事的一个项目用Spring+iBatis做为数据耐久层框架,MySql数据存储。项目公布不久就碰到了严峻的功能成绩,因而决意接纳batch的体例提交数据。我之前的一篇文章:里具体的先容了iBatis框架做batch处置的体例和大概存在的成绩和功能优化,因而同事参考这偏文章对项目举行了改革,引进了batch处置机制。但事变其实不顺遂,在只要2000条数据的情形下,用iBatis框架做batch处置和不做batch所损耗的工夫竟然没有区分,均匀都要50秒摆布。而我在做测试的时分假如做batch仅仅必要1秒,乃至更少的工夫。真是见鬼了,岂非是Spring在弄鬼?由于我的测试和同事的项目独一的区分就是我是间接利用iBatis的SqlMapClient,而同事的项目是利用Spring来猎取SqlMapClient的实例。细心反省了一下伴侣的数据源设置,也没有发明甚么成绩。以下:
<beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<propertyname="driverClassName"value="com.mysql.jdbc.Driver"/>
<propertyname="url"value="jdbc:mysql://localhost/test"/>
<propertyname="username"value="root"/>
<propertyname="password"value="root"/>
</bean>
<beanid="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<propertyname="configLocation"value="SqlMapConfig.xml"/>
<propertyname="dataSource"ref="dataSource"/>
</bean>
就在万般无法的时分,俄然想到一个成绩:假如JDBC的AutoCommit属性被设置为true的话,那即使是依照batch的体例来写程序,也是白费的,每条语句城市间接实行。因而抱着碰运气的立场实行了上面的语句:
System.out.println("以后事物形态:"+sqlMapClient.getDataSource().getConnection().getAutoCommit()); 公然不出所料,输入的值为:true,难怪batch不成用!成绩找到了,怎样办理呢?实验在batch语句实行前手工设置autoCommit属性为false,如:sqlMapClient.getDataSource().getConnection().setAutoCommit(false);了局欠好用,因而检察了一下org.apache.commons.dbcp.BasicDataSource的源代码,发明它的defaultAutoCommit属性默许值为true,这就难怪spring猎取的SqlMapClient的autoCommit属性为true了,既然成绩找到了,办理起来就简单多了,只必要在下面的datasource设置中增添一行:<propertyname="defaultAutoCommit"value="false"/>就能够了。
这里总结一下:iBatis默许的autoCommit属性为false,因而用iBatis框架做batch处置的时分基础不会碰到甚么成绩;在Spring情况下,要看详细DataSource的设置。
java是一种面向对象的编程语言,优点是可移植性比较高,最初设计时就是本着一次编写到处执行设计的。可以开发各种应用程序和游戏,不过速度没有c++快,所以一般是不用java来编写应用程序和电脑游戏。 |
|