发表于: 2017-12-28 23:35:55
1 529
今天完成的事情:
25、不关闭连接池的时候,在Main函数里写1000个循环调用
方法1:
在spring + mybatis + C3p0整合的项目里写循环。因为dataSource又经过了封装,实现了请求数据库接口的类自动关闭。循环调用正常,查询、插入都正常。
package com.bpzj.task1.test;
import com.bpzj.task1.service.StudentService;
public class MainRepeatTest {
private static StudentService studentService =new StudentService();
public static void main(String[] args) {
for (int i =1; i<1001;i++) {
studentService.insert(i);
}
}
}
单个mapper bean的有初始化数量的数据库连接,mapper bean被销毁时,连接池也被销毁。但是如果使用mapper bean的方法(mybatis实现的sql语句映射)进行循环(也就是循环执行同一个mapper bean实例的某个sql映射方法),这时,方法结束后,会自动断开连接,也就不会出现连接没有正常关闭的情况。
如果把循环放在外面,也就是循环创建mapper bean实例,会造成报错:too many connection ,这是因为mysql有默认的最大连接数量。每创建一个mapper bean,都生成一个连接池,到了最大数量,就会报错。
方法2:
在pojo类中使用C3p0数据库,已经使用的连接用完不关闭,会在达到设置允许的最大连接数量后,出现程序暂停。这种情况是直接使用connection进行sql语句的操作,需要手动关闭(或者写成自动关闭的形式)。
26、接DB中断后TryCatch是否能正常处理
接25,方法1,mybatis自动管理了连接的中断和开启,没想到怎么测试
方法2:在sql语句执行前,关闭connection,try catch正常起作用。
27、代码是否符合规范,如果DB的表格有改动,应该改哪些内容,需要多久
不是特别规范,因为规范也没看太多,后边每天要看点。
如果改动DB表,需要改动
Domain层,业务对象的属性、方法、构造器(时间:根据表改,很快)
DAO层,接口是否重新设计,数据库查询、插入等方法也需要改动(这块改动应该不小,如果能巧妙的设计几个通用、扩展性强的接口效果应该会好点)。
Impl(mybatis的sql语句),也要跟着上面的改。主要改动应该在这了。
service层,目前还没涉及到吧。我的理解。
好像底层的接口设计的不好,越往上改动量越大
配置方面:框架整合好,几乎不用改。
28、插入100万数据
使用mysql文件插入(原生mysql语句)
纯sql文件,在sql语句中写循环,100万:36s。
spring + mybatis
spring + mybatis + druid(5个连接) + 单线程,100万数据:77min。
spring + mybatis + druid(150个连接) + 单线程,100万数据:59min。
spring + mybatis 是用了对象,每次插入都新建一个Student对象。性能损失严重。
jdbc + 数据池 + sql语句拼接(没有对象)
用拼接sql语句优化下:
1、拼接sql语句。
mysql有语句最大长度限制:show variables like '%max_allowed_packet%'; 我的默认是4M:4194304。如果想改,可以在my.ini(linux下是my.cnf)添加:
max_allowed_packet = 6M
重启服务
大概十几秒(这个放在了一个普通类里,日志配置失败了)
3000万数据、2亿数据
明天再弄吧
C3p0连接池的几种配置方法
| 配置方式 | 获取数据源 |
spring管理 | spring bean dataSource | 一般不直接获取 |
基础方式 | java 类,setter方法设置每一项 |
|
c3p0.properties文档 | DataSource ds = new ComboPooledDataSource(); | |
c3p0-config.xml文档 | DataSource ds = new ComboPooledDataSource("mySource"); ()种参数是多个配置时的name属性 |
明天计划的事情:
b+树索引、任务1总结、任务2浏览。
遇到的问题:
任务26表述不是很清晰,按程序自己的原因导致和mysql服务器之间连接中断这种情况,而不是关闭mysql服务器造成的连接中断
收获:
又想了想jdbc,可以这么理解:
初始化jdbc驱动,就相当于打开cmd,它为连接mysql准备了一个环境
建立连接,就相当于mysql –uroot –p ,新建一个连接
Statement,相当于一个输入sql语句的环境,Statement. execute 就相当于回车提交sql语句。
mysql
mysql有语句最大长度限制:show variables like '%max_allowed_packet%'; 我的默认是4M:4194304。如果想改,可以在my.ini(linux下是my.cnf)添加:
max_allowed_packet = 6M
truncate清楚数据、主键id记录:TRUNCATE TABLE <表名>;
查看最大连接数show variables like '%max_connections%';
java 关闭流
实现了AutoClose接口的类,可以使用try(){}实现自动关闭。
评论