先费一句话,如果用hibernate,修改
sessionFactory
hibernate.jdbc.batch_size 为1000 的时候,保存1万条数据6秒钟。性能要求不是太高,而且本身用的就是hibernate的话,改下配置就好。否则往下看
保存的速度不稳定,波动。改为batch_size为500的时候,1万条,有时候3秒,有时候10秒。波动
参考:
http://blog.csdn.net/z69183787/article/details/53691927
http://stamen.iteye.com/blog/131203
JdbcTemplate
10万数据插入数据库6秒钟
@Repository
public class TestDaoImpl implements TestDao {
@Autowired
private JdbcTemplate template;
@Override
public void insert(){
final List<Object[]> insertParams=new ArrayList<Object[]>();
for (int i = 0; i < 100000; i++) {
insertParams.add(new Object[] { i+"guid", i+"ggg" });
}
String strSql="insert into Temp " +
"(a,b) values (?,?)";
template.batchUpdate(strSql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
Object[] args = insertParams.get(i);
ps.setString(1, (String) args[0]);
ps.setString(2, (String) args[1]);
}
@Override
public int getBatchSize() {
return 100000;
}
});
}
}
配置只用对应的加一下即可,公用一个datasource 。 事务方面,是公用的
service层中某个方法既调用hibernate 的service 保存方法,又调用jdbcTemplete 的方法。随便哪个方法 出错,事务都会回滚。
service层中某个方法既调用hibernate 的service 保存方法,又调用jdbcTemplete 的方法。随便哪个方法 出错,事务都会回滚。
<!--配置jdbcTemplate模板 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>