发表于: 2018-03-23 12:04:06

2 743


今天试试白天写日报。

上午主要是修改了自己的连接池,从mybanits默认的连接池改为了c3p0连接池,配置如下:

之前一直有个Mysql5.5以上需要添加useSSL=true的警告,跑单元测试的时候一直给我出这个warning,解决办法就是在jdbcUrl后面的value中加入&useSSL=true,然后xml中&符号不能直接使用,需要转义,&在xml中文件中起到&的作用。

这个是这几天一直报错的警告,之前在修改细节也没管它,今天查了一下应该是我JDK版本9.0原因,说是每次处理第一次处理反射都会报warning,还是很烦人的,不影响程序。使用原始的连接池插入一条数据时间是530ms,换了c3p0连接池之后执行插入一条数据的测试单元用时430ms。然后试了一下插入10w条数据,插入了一会就报错了,暂时还没解决问题,准备继续试。

刚刚重新插入了10W条数据,成功了,用时

下面有几个问题:

1.插入数据所用时间和sql语句中的参数长度和数量关系是否很大

2.在spring整合mybanit的情况下是否还需要批处理去加快插入速度

3.现在只是用for语句不停插入同一条数据,区别只在自增主键上,那么如何插入大量不同的数据,怎么实现的?插入数据时mybanits是否缓存了上一次的结果导致插入速度加快?

下午解决这几个问题...另外linux上的mysql5.7,我装上那几个包卸载不掉了,问题待解决...

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")

这两行代码可以让Junit测试在spring容器环境下测试,从容器中拿bean,下面那句可以读取xml文件。

下午学习了log4j日志的配置,首先在resources下面建立log4j.properties文件:

(1)设置log4j级别:

ERROR为显示级别,大致有debug<info<warning<error,一开始记错了,还以为是info<debug,然后调成了debug模式输出了一堆错误信息,比如spring找不到我注入过的文件,找第二遍才能找到等等,后来认真的看了一遍发现debug比info等级低(虽然都没什么用...任务一涉及不到这些,不过还是自己玩玩好),后面两个名字自己起,分别是输出到控制台和本地文档的变量

(2)设置输出到控制台的参数

这里可以设置字体间隔啥的

(3)设置输出到本地文档的参数

可以设置文档最大容量,文字间隔等等好多配置(没用的我也没设置)

(4)在要测试的类中声明

private static Logger logger = Logger.getLogger(Testspringmybanits.class);

新的对象logger,后面参数为该类名称;

PropertyConfigurator.configure("E:/java/springtest/src/main/resources/log4j.properties");

然后在类的方法中(也可以自己建一个空的,我一开始在类里面直接调用这个调用不了,问过师兄才知道要在方法里面调用,哎,基础不好),后面路径我直接用了绝对路径,设置相对路径总是出错,然后就可以在你的方法中调用logger.级别()来输出你想要的东西了,当然这个方法后面可以加入参数,我没加。

@Before
      public void addproperties()
{
PropertyConfigurator.configure("E:/java/springtest/src/main/resources/log4j.properties");
}

这里用了before,感觉是每次test如果都要调用一次那就太麻烦,直接写在before里面,test执行之前来这里调用一次就可以了。

(5)方法里面实际应用

@Test
   public void testAdd() throws  Exception {
logger.debug("插入测试开始");
Student student = new Student();
student.setName("博丽灵梦");
try{
studentMapper.add(student);
logger.debug("插入成功");
}
catch(Exception e)
{
logger.error("插入失败");
}
finally {
logger.debug("插入测试结束");
}
}

在方法的开始抛出异常,然后输入测试开始,在执行要测试的语句的时候使用try,然后如果成功执行该语句就输出插入成功,下面对应的catch一个抛出的异常,含义是如果没有成功执行插入语句那么就执行catch中的插入失败,最后无论是否插入成功都输出插入测试结束(这个try catch和日志输出只能检测插入整个过程是否成功,插入中的小步骤检查不出来,不知道在JDBC封装中如何检测那些小的步骤)。

小小看了一眼日志,但是看到个问题挺奇怪的,在

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" >

这个C3P0连接池中最后一句destroy-method如果写上的话debug会显示系统会处理连接关闭抛出的一个异常(这里应该是指spring的关闭?)然后由系统帮你关上连接,但是如果去掉的话就不会有那两步DEBUG,这里和师兄讨论了一下大概懂了他的意思,就是这里的close方法可以自己写写什么都行,但是如果你是写的close那就会正好调用数据库连接关闭的函数直接关闭数据库连接(有点复杂,只是懂了个大概)。

刚刚才知道原来是要插入100W条数据,师兄说他插了60秒我还以为是10W条...自己插入的好慢,这么算来要插入40分钟,这就去学批处理=-=。

昨天晚上看了一晚上批处理,然后感觉mybanits框架下还是用foreach循环比较容易实现批量处理,可惜网上对foreach中的参数以及foreach应用在insert语句中的介绍都很模糊,只能照猫画虎写了一个

<insert id="pinsert" parameterType="Student" >
insert into student ( name )
values
<foreach item="item" index="index" collection="list"
            open="(" separator="," close=")">
#{item}
</foreach>
</insert>

然后昨天跑了一下是报错的,显示SQL: insert into student ( name )         values          (               ?          ,              ?          ,              ?          ,......)意思是我没有给这个sql赋上应该插入的值,今天的计划是弄好批量处理,改好我的服务器设置安装mysql和java。

还有个小细节错误,我昨天rename了一下我的项目名称,然后再跑单元测试的时候会提示一个moduel_working not exsist,但是整个程序可以跑,大概是瞎改项目名称导致路径错误(我去我的文件夹下面找了发现没有我修改之后的文件夹,我的项目文件夹还是以前的文件夹,应该是这里出了问题),然后我又改不回去,只能重新建了一个项目把东西再复制粘贴回去。另外,生成file的时候你可以选择系统给你提供的xml文件但是注意这个xml文件是没有.xml后缀的,刚刚还导致了一个无法找到该xml文件的错误,看了半天才发现是这里的问题。


返回列表 返回列表
评论

    分享到