发表于: 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.    Q25Q26

1)          测试一下不关闭连接池的时候,在Main函数里写1000个循环调用会出现什么情况

编写MainApp2作为测试类:

执行结果:正常输出了1000

这就奇怪了,猜测是我使用了spring框架,没有直接使用dbcpc3p0连接池的原因

2)          测试一下连接DB中断后TryCatch是否能正常处理

在原来MainApp2的代码中for循环外嵌套一个try-catch

然后重新编译后运行:

运行一次后被中断,

结论:能正常处理

5.    检查一下自己的代码是否符合规范,如果DB的表格有改动,应该改哪些内容,需要多久。

1)          代码规范问题,自我感觉不好,还需要向师兄学习请教

2)          如果。。。我不知道,所以直接把“如果”变成现实。

继续改动MainApp2的代码,去掉try-catchfor循环:

改动表字段前确保原先可以查询到:

改动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)        上文提到的执行mavenjar包问题

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)        云服务器上的操作



返回列表 返回列表
评论

    分享到