发表于: 2017-09-02 22:49:43
2 1122
一、 今天完成的事情
1. 再次学习maven
1) maven中的坐标和仓库
maven中任何一个依赖、插件、项目构建和输出都可以称为构件
所有构件都通过 坐标 作为其唯一标识
仓库,则是用来管理这些构件(或者说依赖)。仓库分为本地仓库和远程仓库。
如果本地仓库中找不到需要的构件,就到远程仓库中查找。
默认的远程仓库的地址:https://repo.maven.apache.org/maven2
(打开maven目录\lib\maven-model-builder-3.5.0.jar\org\apache\maven\model\pom-4.0.0.xml文件可以看到)
2) maven生命周期(各阶段)
clean 清理项目
|-- pre-clean 执行清理前的工作
|-- clean 清理上一次构建生成的所有文件
|-- post-clean 执行清理后的文件
default 构建项目(最核心)
|-- compile
|-- test
|-- package
|-- install
site 生成项目站点
|-- pre-site 在生成项目站点前要完成的工作
|-- site 生成项目的站点文档
|-- post-site 在生成项目站点后要完成的工作
|-- site-deploy 发布生成的站点到服务器上
3) 通过mvn执行main方法:mvn exec:java -Dexec.mainClass="类全限定名"
[-Dexec.args="arg0 arg1 arg2"]
[ ]表示可不加,用于传入参数
2. Java项目分层
开始接下来的任务之前,我决定先按照基本的分层规则创建一个Java项目
1) 分层:
将项目分成三层,表示层(app),业务逻辑层(service),数据访问层(dao)
表示层依赖业务逻辑层,业务逻辑层依赖数据访问层,不能跨层
2) 具体示例:
3) 编写好代码后,通过mvn package 打包成jar包上传到服务器
或者 不打包直接把整个项目上传,通过mvn exec:java执行main
3. 在云服务器上执行main
1) 使用mvn compile命令编译后执行main方法
2) 运行结果:
分别对应调用的方法:
3) 可能遇到的错误
Eclipse中使用mvn命令时出现:
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK
更改配置:
Maven 项目生成jar运行时提示“没有主清单属性”
原因:没有找到入口类 ——> MANIFEST.MF文件中没有配置
在pom.xml加入插件:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>person.dh.app.MainApp</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
克服上面两个难关后,发现…还是没办法执行jar包
问题应该出在我的spring配置文件,网上搜了几个版本都没用,最后,换成上传整个项目的方式。
4. Q25、Q26
1) 测试一下不关闭连接池的时候,在Main函数里写1000个循环调用会出现什么情况
编写MainApp2作为测试类:
执行结果:正常输出了1000次
这就奇怪了,猜测是我使用了spring框架,没有直接使用dbcp或c3p0连接池的原因
2) 测试一下连接DB中断后TryCatch是否能正常处理
在原来MainApp2的代码中for循环外嵌套一个try-catch
然后重新编译后运行:
运行一次后被中断,
结论:能正常处理
5. 检查一下自己的代码是否符合规范,如果DB的表格有改动,应该改哪些内容,需要多久。
1) 代码规范问题,自我感觉不好,还需要向师兄学习请教
2) 如果。。。我不知道,所以直接把“如果”变成现实。
继续改动MainApp2的代码,去掉try-catch和for循环:
改动表字段前确保原先可以查询到:
改动applicant表字段name ——> name2
编译,执行,看到抛出异常:
大概意思是:当执行Java字节码文件时发生一个异常;错误的sql语法
开始更改源代码:
将dao实现类的sql语句中name 改 name2
再修改封装数据的结果集类name 改 name2:
再次编译执行,则成功查找:
结论:
表字段被修改时,对于spring-jdbc来说,需要修改dao层和mapper层
6. 对比建索引和不建索引的效率差别
数据量好大,直接换回本地了。
插入900w数据(applicant表有索引,applicant cory表没有)
直接查询:
暂且到此,就这还没到1000w数据量我插入时就卡到爆,如果师兄有什么技巧就教教我哈
7. 部署Tomcat
1) Tomcat是什么?
Tomcat是一个web应用服务器,可以装载javaweb程序,相当于一个容器
用来执行servlet程序和jsp文件
2) 安装步骤
准备好tomcat的安装压缩包(我选择的是7.0版本):
使用 tar -xvf 命令进行解压
安装完毕
3) 更新配置
开放端口号:8080
开放8080端口:/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
将设置添加到防火墙的规则中:/etc/rc.d/init.d/iptables save
4) 简单操作
启动tomcat服务器。
进入tomcat目录/bin/ ,使用 sh startup.sh 或 ./startup.sh 命令启动
关闭tomcat服务器
进入tomcat目录/bin/ ,使用 sh shutdown.sh 或 ./shutdown.sh 命令关闭
查看日志 位于tomcat目录/logs/catalina.out,使用 cat 或 more 或 tail -f 命令查看
最后检验:(如果这里远程连接不上服务器,到云服务器控制台-安全组-配置规则-添加8080端口)
在启动tomcat的情况下,在浏览器地址栏输入:服务器ip:8080 后回车
看到tomcat的标志性页面说明访问成功
二、 明天计划的事情
1) 任务小结
2) 深度思考
三、 遇到的问题
1) 关于代码规范问题,有什么需要注意的吗?
2) 上文提到的执行maven的jar包问题
3) 使用mvn exec:java 执行main方法时遇到的下面异常警告,大意是Thread这个线程被中断后仍然存活了一段时间,是由代码本身逻辑错误引起的。
[WARNING] thread Thread[Abandoned connection cleanup thread,5,person.dh.app.MainApp2] was interrupted but is still alive after waiting at least 15000msecs
[WARNING] thread Thread[Abandoned connection cleanup thread,5,person.dh.app.MainApp2] will linger despite being asked to die via interruption
[WARNING] NOTE: 1 thread(s) did not finish despite being asked to via interruption. This is not a problem with exec:java, it is a problem with the running code. Although not serious, it should be remedied.
[WARNING] Couldn't destroy threadgroup org.codehaus.mojo.exec.ExecJavaMojo$IsolatedThreadGroup[name=person.dh.app.MainApp2,maxpri=10]
java.lang.IllegalThreadStateException
还没去百度找答案,先放着。
四、 收获
1) 重新熟悉了spring-jdbc的操作,但还是很迷糊
2) Mvn的使用
3) 云服务器上的操作
评论