发表于: 2018-03-28 23:01:03
1 620
今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)
一、task23-使用mvn跑单元测试
1.首先在本地cmd将路径切换到放maven工程的路径下
如果路径不对会报错找不到文件,路径如果到了target中就会发现找不到pom文件
2.使用mvn test -Dtest=[MybatisTest01]来运行打包的jar包
会先下载相关配置jar,然后报错
最后发现是命令不对,换了命令
可以得到与在idea中同样的测试结果
但是现在有个问题就是这个test是针对我的源文件的,而不是我打包完的jar包,也就是说我的源程序可以用命令行跑test,但是得是编译后才行,而打包完的jar包却不知道为什么里面没有包含test类。。。
所以现在要解决的问题就是怎么使得打包完的jar包中包含测试类而不跳过测试类(和深度思考刚好相反)
最后查资料发现是自己的思维进坑了,深度思考的问题是如何在打包时跳过Junit步骤,即程序在打包之前如果不跳过Junit,它是会自动运行一遍测试类再进行打包,如下
可以看到在打包成功之前,其显示进行了八个测试类的运行。
所以之前我以为那个跳过是跳过打包测试类,但是测试类的解释是:
test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
所以,不管怎么样,这个test都不会被打包进jar,如果想使用mvn跑测试,只能在未打包的工程里面跑!
二、task24,将main在服务器上跑通
1.首先使用rz命令将打包好的jar包传到服务器上
2.使用find命令查找
3.运行此jar包 java -jar MybatisTest01-1.0-SNAPSHOT.jar
出现如下错误
百度后发现是因为缺少相关依赖包,即在打包时需要将相关依赖包都打包进去才能运行
在pom.xml中添加如下插件
<!--将依赖包打包进jar中-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<type>jar</type>
<includeTypes>jar</includeTypes>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
此时再打包会发现多了一个文件夹
lib文件夹里就是相关的依赖包,此时打开本地cmd,先试验一下,
可以看到是可以打开的,于是将jar上传到服务器,同时再运行发现还是一样,说明只有jar是不行的,得把相关依赖也传上去,
因为之前用rz只能单个传文件不能传文件夹,所以这里需要使用pscp,下载一个pscp.exe,因为不想配置环境,所以直接在下载的文件中cmd,输入以下命令pscp -r F:\java\IdeaProjects\MybatisTest01\target\lib root@47.97.191.172:/root
其中-r为整个文件夹上传,第一个root为用户名,第二个root为输出目标文件夹
在界面中输入登陆密码即可上传
再在服务器上运行
可以看到和本地结果一致!但是,本地日志没有打上去。。。
我想要是还要记录日志的话应该有两种办法:
①:使用之前说的将信息发送到某处的方法:org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
②:将log4j的配置文件中输出位置直接改到服务器上,在服务器上新建log.log
三、task25,不关闭连接池情况下,在main中执行1000个循环调用
这个之前在连接池部分已经实验过了,好像是和关闭连接池差不多的,因为都是单线程操作,所以其实是没什么差别的,因为即使我没开连接池,我在循环过程中也是不关闭那一条连接的,而是在进程结束才关闭,所以看起来是没什么区别的。
两次分别是用连接池和不用连接池的情况,其对象地址都是不变的,时间也是差不多的。
四、task26,测试DB连接中断后能否try-catch到异常
如果在运行过程中数据库连接中断,try-catch应该是可以发现异常,首先,插入数据量很大的情况下,时间很长,那么就留给我们时间来中断数据库,但是,怎么使DB连接中断呢?想了很久我只想到在管理中关闭mysql的服务
先试试插入十万条数据,看看时间要多久
可以看到,一共花了353秒才插入完,这应该是由于spring的自动提交,每次插入就提交一次所以造成了时间特别长。
现在测试一下重新插入,过程中中断数据库,看能不能catch异常。
可以看到,在连接中断之后是可以catch到异常的,但是很奇怪的一点是,当发生其他异常时,是直接跳出for循环直接到下一步的,但是在这个demo中,程序一直在重复连接,一直报异常,不知道是为什么。
经过师兄的指点,这是因为没有catch到异常,所以才会一直报错,所以这里的结论应该是不能正常处理。
五、task27,检查自己的代码是否符合规范,如果要改DB表,应该怎么改,要多久
1.可能需要将created_at和updated_at改掉,因为这个下划线是数据库的连接空格时的命名方式
2.如果还要改DB表的话可以增加字段,增加无唯一标签的字段的话就要改model类中的构造方法,set/get,
mapper.xml中的相关语句,不过因为有标签所以可以直接加进去,然后DAO层,Service层两个,Test类,Main方法,大概加一个字段需要二十分钟吧估计
3.改一次还是很麻烦的,这还是表比较小而且没有数据的情况下,如果表很大,牵涉到多种构造方法,还要更新数据库信息的话,肯定更久,所以,DB表在一开始最好就做好最终规划,这样,后面的程序也就可以根据表格来写,不需要去加加减减。
明天计划的事情:(一定要写非常细致的内容)
1.将任务代码完善,试一下注解模式
2.测试下带索引和不带索引的情况下插入数据的时间差别。
3.将另外两个版本即只有mybatis和只有jdbctemperate的再写一遍
4.有时间的话可以开始深度思考了
遇到的问题:(遇到什么困难,怎么解决的)
1.主要还是打包之后运行不了的问题,最后通过打包依赖解决了,但是有个Runable的打包方式是使用idea自身的打包将所有包括依赖打包到一起,但是试了一下发现明明设置了主程序Main方法却找不到主程序入口,所以暂时先放弃了。
2.在打出依赖包之后因为不熟悉传文件夹的方式,所以当时跑去研究怎么打到一起,其实最直接的方式应该是去研究怎么传文件夹,所以方向还是得找准才不容易跑偏
收获:(通过今天的学习,学到了什么知识)
1.成功使用mvn命令跑了单元测试
2.成功将jar包在服务器跑通了Main函数
3.理解了那个深度思考里的打包阶段跳过测试的意思,其实不是跳过打测试包而是跳过打包前的最后一次测试
4.知道了try-catch是不能处理DB中断的异常的,只会一直抛出
评论