`
showtime520
  • 浏览: 87582 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

一段时间项目总结

    博客分类:
  • JAVA
阅读更多
晕死,刚才写完的时候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次
分享到:
评论
1 楼 lgl669 2009-06-25  
写的很不错,现在忙没有认真看,先收藏,有时间好好看。

相关推荐

    PSP项目计划总结表

    PSP项目计划模板和说明Minutes/LOC,LOC/Hour,缺陷密度,Defects/KLOC,程序规模 ,开发阶段时间,引入的缺陷,排除的缺陷

    Qt的开发体会 ppt

    Qt使用一段时间的小小总结

    SpringMvc 总结文档,适合项目开发

    适合用过一段时间SpringMvc的开发者, 以及看开始用SpringMVC开发项目的开发者, 很不错的总结文档...

    vue项目实战总结篇

    这篇文章把小编前段时间做的vue项目,做个完整的总结,具体内容请参考本文。 这次算是详细总结,会从项目的搭建,一直到最后的服务器上部署。 废话不多说了。干货直接上。 一、 必须node环境, 这次就不写node环境的...

    软件项目生存期模型-软件项目管理

    收尾阶段是软件项目的结束阶段,它的任务是完成项目的验收和交付工作,进行项目总结和评估,记录和归档项目的文档和资料,并为项目后续支持和维护工作做好充分的准备。 可以说,软件项目生存期模型提供了一个系统化...

    项目管理论文

    用项目总结来减少问题的重复发生 130 有效控制质量、工期、成本三大目标 133 在项目管理中面对面交流最重要 134 IT项目如何做好进度管理 135 对“项目时间管理”的认识和体会--“赶工和快速跟进”在工作中的运用...

    微信小程序项目总结《一》序言、准备工作、项目构架

    我个人觉得张小龙是一个十分有情怀的互联网人士,2017年3月27日微信终于向个人开发者提供开发账号和平台,对于计算机专业的我,也是在忍不住想体验一下这个未来将取代原生App的应用(自己开发一段时间后才慢慢发现,...

    超市综合管理信息系统的设计

    第五阶段 项目总结和评估。 下面分别对这几个阶段的主要工作进行简单的介绍: (1)系统开始和可行性研究 系统开始和可行性研究是为了系统开发做的前期准备的。第一阶段多数工作和编写的资料是第二阶段的输入。第一...

    IT项目管理那些事儿

    第一篇 项目篇 第1章 中小型民营IT企业项目管理手记 1.1 项目管理是什么 1.2 背景介绍 1.2.1 个人背景 1.2.2 公司背景 1.2.3 项目背景 1.3 软件工程 1.3.1 系统概述 1.3.2 系统规划 1.3.3 系统需求 1.3.4 系统设计 ...

    软件开发全流程文档规范

    详细设计文档、概要设计文档、项目总结报告、项目计划书、项目设计文档。项目可行性研究。项目计划书。项目测试文档 二、项目规划是软件项目管理的核心部分。在项目规划阶段,项目团队需要制定详细的项目计划,包括...

    项目实施方法参考手册

    同时每一项活动都要消耗一定的项目资源和时间,并且需要按照一定的次序执行。 每一个活动都可以分为准备、活动、复查三个步骤进行。 一个活动可能有前续活动和后续活动。活动与活动之间的关系有以下三种类型: 二、...

    vue项目总结之文件夹结构配置详解

    之前一段时间都在使用 vue 开发后台管理系统,在摸索的过程中对 vue 本身和模块化、规范化开发有了更深的认知,现在记录下来,希望对其他需要开发项目的人有帮助。 基于 vue.js 的前端开发环境,用于前后端分离后的...

    信息系统项目管理师 论文 信息系统项目管理师范文

    用项目总结来减少问题的重复发生 130 有效控制质量、工期、成本三大目标 133 在项目管理中面对面交流最重要 134 IT项目如何做好进度管理 135 对“项目时间管理”的认识和体会--“赶工和快速跟进”在工作中的运用 137...

    图书管理系统沟通计划

    2.2.3项目总结(项目结束阶段输出) 9 2.3文档审批 9 2.4技术会签的方法 9 三、项目沟通协调的主要控制点 10 3.1项目预审 10 3.2开票回款 10 四、材料、设备采购 11 五、质量事故处理 12 六、联合验收 13 七、对于...

    软件项目管理进度管理-ppt

    最后,在监控进度阶段,需要监视项目进度的推进情况,对实际进度进行分析和调整,确保项目按时按质完成,并及时纠正偏差,以便在项目完成时对进度进行总结。 进度管理可以帮助项目经理了解项目进展情况,及时纠正...

    jdk1.8_sourceCode:这是我JDK 1.8源码分析注释项目,每次分析完了感觉自己悟了,隔一段时间就又忘得一干二净,所以每次做好中文笔记,不断审查

    这是我JDK 1.8源码分析注释项目,每次分析完了感觉自己悟了,隔一段时间就又忘得一干二净,每次做好中文笔记,不断地复习。 我的看原始码心得(以下为mac平台的快捷键,win请把cmd换成ctrl):0。先取消项目的sdk,...

    信息系统招标技术要求.docx

    主要技术规范及要求 业务应用系统运维背景说明 3.1.1XXXX...第五阶段,上线及上线支持,工作主要包括切换前最终检查确认、初始数据导入、动态数据抽取及传输、导入后数据核查、项目总结、上线后支持、培训及知识转移。

    Threejs开发3D地图实践总结

    前段时间连续上了一个月班,加班加点完成了一个3D攻坚项目。也算是由传统web转型到webgl图形学开发中,坑不少,做了一下总结分享。法线是垂直于我们想要照亮的物体表面的向量。法线代表表面的方向因此他们为光源和...

    echarts-2.2.7

    前一段时间一直都挺忙的,各种事,也没来得及每周的总结,趁着晚上的一点时间把项目中用的Echart中常用的各种图表给抽象总结了一下,趁着周末跟大家分享一下。之前写过一篇相关的文章,当时主要是讲了如何引入、使用...

    撸一段SQL?还是撸一段代码?

     那段时间基本是仰视的态度,每天都去讨教一点手写 SQL 的要点,翻看一些 SQL 优化调整的技巧。  随着积累和实践,SQL 水平提高的很快,同时也写了很多。  随后经历了几个项目的打磨,不断去调整公司的框架,...

Global site tag (gtag.js) - Google Analytics