晕死,刚才写完的时候chromes崩溃了,加代码的时候。。。。。貌似这个fckeditor有BUG~~
重写~~~
来河南一个多月了,一直跟进这个项目,从最开始从需求了解,需求分析,到现在跑河南和客户交流,沟通,从项目JAVA代码的框架搭建到现在代码的编写。觉得自己有了一个长足的成长,当然是非技术上的成长,技术上貌似退步了。
首先,遇到以前头痛的项目管理上的问题,现在有了一定的认识与经验。对于项目进度与项目周期有了一定的了解。对于项目上的代码估算有了一个深层次的提高。对项目工期的安排也渐渐得心应手了。
其次是和人交流的方面,这一方面真的是靠练出来的,接触多了。和别人交流起来自然就舒畅多了。这也是个很重要的素质。
当然,在项目遇到了技术问题,现在就来总结一下:
首先是spring发邮件的问题,貌似现在很多邮件服务器都需要对用户进行身份验证,在这里就比一般的邮件发送多一步:
<bean id="smtpAuthenticator" class="com.xxx.base.util.PopupAuthenticator">
<property name="password">
<value>${mail.password}</value>
</property>
<property name="username">
<value>xxx</value>
</property>
</bean>
<!-- 邮件会话-->
<bean id="mailSession" class="javax.mail.Session" factory-method="getInstance" >
<constructor-arg>
<props>
<prop key="mail.smtp.auth">
${mail.smtp.auth}
</prop>
<prop key="mail.smtp.timeout">
${mail.smtp.timeout}
</prop>
</props>
</constructor-arg>
<constructor-arg ref="smtpAuthenticator"/>
</bean>
<!-- 邮件发送者 -->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host">
<value>${mail.host}</value>
</property>
<property name="port">
<value>25</value>
</property>
<!--
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">
${mail.smtp.auth}
</prop>
<prop key="mail.smtp.timeout">
${mail.smtp.timeout}
</prop>
</props>
</property> -->
<property name="session">
<ref local="mailSession"/>
</property>
</bean>
<!-- spring的发送者 -->
<bean id="sendMailService" class="com.xxx.base.mission.service.impl.SendEMailService">
<property name="sender">
<ref local="mailSender"/>
</property>
</bean>
需要在邮件会话session里加一个验证的类PopupAuthenticator
public class PopupAuthenticator extends Authenticator {
private String username=null;
private String password=null;
public PopupAuthenticator(){}
public PasswordAuthentication performCheck(){
return getPasswordAuthentication();
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(this.username,this.password);
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
这样才能成功发送邮件。
还有一个困扰我很久的问题,就是对于DefaultAutoProxyCreator这个自动代理的类,看上去这个自动创建代理的创建者会帮你搞定一切。但是,我在这里遇上了很大的问题,首先是在加一个jdbcTemplate类时,一启动程序就会报一个:proxy不等于代理类的错误,这很让我头痛,代理创建的类应该是所代理的类子类才对,我弄了几天,在这里卡了几天,后来分析debug信息(log4j也是个非常强大的调试工具)发现这个Creator会为每个bean文件中的bean都创建代理,这样就脱离了我们的本意,我们只需要给事务管理器创建代理(一般的项目需要创建代理的只有几个),也给项目带来了额外的性能开销,另外当把发送邮件加入时,这个creator也会为javax.mail.Session创建代理,但session是final的,不能有子类,这里也会报错。所以我决定不能偷懒,一个事务就写一个creator
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>*WebService</value>
</property>
<property name="interceptorNames">
<list>
<value>transactionIntercepter</value>
</list>
</property>
</bean>
这个defaultautoproxycreator引发的问题我GOOGLE了一下,也没人给出合理的解释。改成上面代码后,项目成功运行,搞定错误。暂时松了口气。
还有一个就是批量更新的问题:开始的时候我准备弄一个对象池供查询过来的数据封装成对象用,因为同步的数据有几十万条,那就得new几十万次,想当然就认为使用对象池比较好,后来拜读了robbin的一段回帖后才对对象池有一些深刻的理解:对象池不单单是用一个集合维护生成的对象就可以了,还得考虑同步的问题,多线程的环境,对于一般的小对象建对象池都是愚蠢的,只有当hold外部资源的时候才有建对象池的必要,例如:数据库连接池。现在的JVM对这些短命对象GC的效率非常高了。事实也证明了这一点,我在批量导入数据的时候,一次生成3000个POJO对象(这3000个POJO对象属性个数小于10),内存和CPU的占用率都没有明显的提高。
对于ORACLE中分页有了一个新的认识。
oracle中经典的并有很高效率的分页语句是:
select * from(
select a.*,rownum rn from
(select * from table) a where rownum<=endrow
) where rn>startrow;
但是分页语句有个很难解决的问题,那就是当要读取后面数据的时候效率还是很慢。大约一个表前2万条的时候效率还是很高的,当数据量超过2万条后,效率大大降低。
在我刚开始同步数据的时候,200条做一次批量,当数据量到了2万以后,查一次就不动了,程序也不报错,oracle也好好的。当时很纳闷,更新一次得一分钟。开始以为是ORACLE的回滚端容量小了,批量插入占满了回滚段,就调大回滚段,但调大了没多大提高。后面对SQL语句测试发现了分页的问题。后面决定把查询量设大,一次3000,终于让更新数据控制在可以容忍的地步。
继续补充:
使用了spring的quartz定时任务,在tomcat服务器下会有一个BUG,一个定时任务会启动2次。
最初的时候,我只发现一个事务在启动的时候突然报一个表被锁(我是删除一个表的数据 ),no wait~~~
~我从项目中的事务开始检查起,仔细查看日志,寻找有无hold的事务,最后找得崩溃~~断定不是事务的问题,查看启动日志,发现在tomcat启动时定时任务会启动2次,迷惑ing~~~~
google了一把,终于找到了问题~~~
当用eclipse部署应用到tomcat,然后用eclipse启动时,不会有这样的问题。当把应用打WAR包发布到生产环境时就有问题了。
请看下面这段配置就是错误的:
<Host name="www.***.com" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="localhost_log." suffix=".txt" timestamp="true" />
<Context path="" docBase="/tomcat/webapps/***" debug="1" />
<Context path="/***2" docBase="/tomcat/webapps/***2" debug="1" />
</Host>
正确的配置如下
[code='xml']
<Host name="www.***.com" debug="0" appBase="" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="localhost_log." suffix=".txt" timestamp="true" />
<Context path="" docBase="/tomcat/webapps/***" debug="1" />
<Context path="/***2" docBase="/tomcat/webapps/***2" debug="1" />
</Host>
这两段的区别是第二段去除了appBase="webapps"中的webapps变成了appBase="",因为web应用程序都是放在webapps这个目录下的,如果不把“webapps“去掉,这里会调用一次quartz的任务调度,在接下来的“<Context path”中又会调用一次quartz的任务调度,所以就重复了2次
分享到:
相关推荐
在IT行业中,项目总结是项目生命周期的最后一个重要环节,它为团队、管理层乃至整个组织提供了对项目执行情况的全面回顾。这份"项目总结模板"旨在帮助我们系统化地记录项目的关键信息,提炼经验教训,以便于未来项目...
项目总结阶段评审表1是项目管理中一个重要的文档,旨在对项目的整个生命周期进行评估和反思。本文档的主要目的是对项目的成果进行评估,检查项目是否达到了预期的目标,并对项目的执行过程进行反思和改进。 从评审...
【腾讯项目总结报告模板】是项目管理中一个重要的工具,尤其在IT行业中,它能够帮助团队高效地回顾项目过程,提炼经验教训,并为未来的项目提供参考。这份资源包含了一系列可以直接套用的报告模板,旨在提升工作效率...
《华为项目管理模板之10 项目总结表》是一份详尽的项目管理文档,旨在对项目的全过程进行回顾和总结,以提炼出宝贵的经验和教训,为未来项目的成功执行提供指导。以下是根据模板内容解析出的关键知识点: 1. **项目...
#### 一、项目总结的重要性 项目总结是在项目结束后进行的一项重要活动,旨在回顾项目的执行过程、评估项目成果,并从中吸取经验教训,为未来的项目管理提供参考。有效的项目总结能够帮助组织和个人更好地理解项目...
项目总结报告是项目结束后对整个项目执行情况的全面回顾,旨在提炼经验教训,评估项目绩效,并为未来的项目提供参考。以下是对"项目总结报告模板DOC"的详细解释: 一、项目基本信息 这部分包括项目的基本概况,如...
在项目管理领域,项目总结报告是项目生命周期中的一个重要环节,它是对整个项目实施过程的全面回顾、分析和总结。这份报告通常在项目结束时编制,目的是记录项目的关键成果、经验教训、遇到的问题以及解决策略,为...
【软件项目总结报告模板】 软件项目总结报告是项目完成后对整个开发过程的全面回顾和评估,旨在记录项目的关键信息,分析项目的执行情况,以及总结经验教训。以下是对报告各部分的详细说明: 1. **引言** 引言...
从给定的文件信息来看,我们正在探讨一个项目阶段总结报告模版的详细内容与结构。这份模版旨在为项目的各个阶段提供一个标准化的汇报框架,确保所有关键信息都被记录和评估,从而促进项目的顺利进行和未来的改进。...
软件测试项目总结模板 软件测试项目总结模板是软件测试项目的最终总结报告,旨在对软件测试项目的测试结果进行总结和分析。该模板涵盖了测试项目的各个方面,包括测试目的、输入文档、测试实际进度、测试结果分析、...
【Java软件项目总结】 在Java软件开发领域,项目管理是一个至关重要的环节,它涉及到项目的启动、执行、监控直至关闭的全过程。本项目总结主要聚焦于前期策划和后期三维制作两个阶段,这两个阶段对于软件项目的成功...
- **提交时间**:项目总结报告的提交日期。 - **项目周期**:从项目启动到项目结束的时间跨度。 - **开始日期**:项目正式启动的日期。 - **结束日期**:项目完成所有任务并交付成果的日期。 - **周期**:项目从...
项目总结报告的目的是提供一个结构化的文档,它包含了软件产品或项目的详细信息,便于后续的维护、交接和代码重用。通过总结,可以清晰地了解项目的完成情况,有助于团队和管理层了解项目实施的效果。 2. **适用...
在本文中,我们将深入探讨一个名为“XXXX市XXXX信息委区政府网站群基础平台项目及软件监测项目”的系统集成项目。这个项目的主要目标是为XXXX市XXXX信息委建立一个高可用性和高冗余性的网站服务平台,以确保政府门户...
【软件项目总结报告---应用模板】是一份详细指导如何撰写项目总结报告的规范文档,旨在确保软件项目完成后,总结报告的结构清晰、内容全面,便于后续的维护、交接和代码重用。报告的编写规范包括排版标准、模板使用...
#### 一、项目总结报告的重要性及结构 - **重要性**:项目总结报告是项目管理中的重要组成部分,它不仅能够帮助团队回顾整个项目的执行过程,还可以为未来的项目提供宝贵的参考经验。一个良好的项目总结报告应该...
项目计划阶段是项目启动的关键,这一阶段需详细规划项目实施的范围,定义交付成果,识别风险,并制定时间、成本和人力资源计划。通过工作结构分解(WBS),将项目划分为可管理的小任务,并绘制相应的组织结构图、...
本报告将详细阐述一个典型的软件项目管理过程,并以"34项目总结报告.doc"为例,分析项目的实际开发结果、开发工作评价以及试运行工作评价。 【项目启动与规划阶段】 在项目启动阶段,明确了项目的目标和范围,制定...
一个成功的项目总结应该包括每个阶段的目标、关键任务、责任人以及实际完成情况的对比分析,以便于识别项目管理中的优点和不足。 2. **需求分析**:在项目初期,需求分析是至关重要的。项目总结中可能涉及如何与...
1. "项目总结报告.doc" - 这是主要的项目总结文档,很可能包含了项目的详细信息,如项目背景、目标、实施过程、遇到的挑战、解决方案、项目成果、团队贡献、项目管理策略、成本控制、时间管理、质量保证、风险管理、...