大家都知道,eclipse, 有时候速度慢的要死,让我们很抓狂,卡 是它的一个特性! 这也严重影响了我们的开发速度,有时候为了测试一个改进,不得一次、两次、三次…… N次的编译、发布、重启tomcat, 而每次少则一两分钟,多则几分钟, 这中间花费的时间可想而知。
1 先说elipse 优化
插件: 用得时间长了,就会装很多插件,启动关闭eclipse都很慢。 解决方法:preference, 搜Window->Preferences->General-Startup and Shutdown (打勾或去勾) 可以禁掉不用的插件
编译:改用手动编译,千万不用自动编译了,自动编译经常到73% 是个死穴。
解决方法: 工具栏project, 去掉build automatically。 手动编译快捷键:ctrl+B (相对来说,那是相当滴快啊)
另外,如果不怎么改页面html xhtml, 页面校验validation也可以去掉,编译时校验也很费时,preference,搜validatoion, 把相应的勾勾去掉
2 发布 tomcat
tomcat关闭重启也是经常的事,怎么能更省点事呢? server 窗口,双击 打开页面


通过 图1 可以配置工程与tomcat的结合方式; 图2 配置发布方式,选3 可以每次编译(ctrl+b)就 自动发布(选2可以每次改动资源文件就自动发布)。 如果你仅修改了一些非已注入的bean代码,连重启tomcat也免了,否则也需要重启, 但至少把发布这步也给省了。
3 我们的工程下经常会有各种工程,有自己的开发工程,可能还有自己的测试工程,暂时没用的可以close掉,这样在启动 关闭 编译(ctrl+b)时都可以快点

4 最后是解决his下 junit不能用的问题。 之前大家都用过的,后来不能用了。
原来的问题一运行出现的问题是:

这里面给的提示 全是junit spring框架的错误代码,没有一点关于我们的业务代码,确实不太好找到问题所在。
经过一些分析,不是lib包的问题,也不是test代码本身的问题, 最终的原因是mapper加载出现了问题,即:

准确来说是:加载 com.centling.his.persistence.dictionary的问题,再准确一点是加载com.centling.his.persistence.dictionary.base 和 com.centling.his.persistence.dictionary.patient 包 的问题
但我挨个试了下,单独加载里面的每个类,又没问题。 里边代码我不熟,不好说。
解决方案:我们重写一个配置文件testContext.xml ,在测试类时读入。
针对要测试哪个业务方法,只加载需要的mapper和service bean, 没有必要全部加载,虽然需要在配置文件多写几行代码,但在启动时那是快不少滴 ~~~~~
给出两种配置方案:
(-)比如只需要两个service 和几个mapper, 可以这么写
<bean class="com.centling.his.service.BusinessService.ChargeService">
</bean>
<bean class="com.centling.his.service.hospitalcharge.PatientChargeInventoryInHospitalService">
</bean>
<!-- 只加载需要的mapper类 -->
<bean id="chargeMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.Business.ChargeMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="inpBillDetailMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.finance.inHospital.InpBillDetailMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="dictFunctionInfoMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.dictionary.sys.DictFunctionInfoMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="patientInhospRecordMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.medical.patient.PatientInhospRecordMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="dictSectionInfoMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.dictionary.staff.DictSectionInfoMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="patientAdmissionRecordMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.medical.patient.PatientAdmissionRecordMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
(二)第二种解决方式 配置代码少点,加载的多点
<!-- 需要的用到或测试的 service -->
<bean class="com.centling.his.service.BusinessService.ChargeService">
</bean>
<bean class="com.centling.his.service.hospitalcharge.PatientChargeInventoryInHospitalService">
</bean>
<!--只加载需要的包,看清楚里边没有com.centling.his.persistence.dictionary.base 和 com.centling.his.persistence.dictionary.patient 包 噢 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.centling.his.persistence.Business;
com.centling.his.persistence.finance;
com.centling.his.persistence.medical;
com.centling.his.persistence.dictionary.sys;
com.centling.his.persistence.dictionary.staff;
com.centling.his.persistence.dictionary.patient;
" />
</bean>
另外,希望大家在平常 测试base 和 patient包下的mapper 的过程中,能够逐步找到是哪个mapper的问题,真正解决之~~~~
示例代码已经上传: 配置文件是textContext.xml, 测试类是 根目录test下 com.centling.his.mobile.PatientChargeTest
可以完美运行。
以后,让我们像以前一样尽情的“junit” 吧!!!
希望对大家的开发和测试有一些帮助,提高我们的开发测试速度。。。。。
Best Wises For EveryBody ~~~~~
Hi everyone 不好意思,我之前没理解到家。 谢谢大师的指出,Seven的反馈。谢谢Damon,与他也一起测试了一下————Controller 也是在tomcat启动读入xml时 一并加载了的,如下:


既然如此,在之前说的“比较理想与省时间的开发和测试步骤”中 把Controller代码和页面放在tomcat上启动测试,就行不通了。但
是我们可以做如下调整: 即 Controller的代码也可以像service一样在junit测试上测试好,就可以了。 然后只“启动一
次”tomcat来测试 xhtml页面, 不也是一样的吗?! 当然只“启动一次”只是理想情况,如果你junit测试好了,确实可以尽量减
少Tomcat启动次数,提高开发效率。
另外,在用junit测试的时候,我们经常用打印的方式,但是我感觉有时候用debug更方便,设一个返回的变量,通过Debug我们可以直
接看到里边的值,很方便,比写一串打印语句要方便。
不重启的终极方案:
1 Dynamic code evolution VM 一个允许在运行状态下无限制的修改加载类文件的Java虚拟机补丁
http://ssw.jku.at/dcevm/binaries/
但是我没安装成功,也就没测试成功,我的jdk是1.7,好像说不支持。 1.6的童鞋 感兴趣的可以试一下,期待你们有重大发现!!!
2. Jrebel 一个eclipse的插件
http://zeroturnaround.com/jrebel/jrebel-4-5-released-includes-jrebel-social/
我已经安装测试了,很方便确实无须重启,图下:

修改了controller的代码,编译过后,直接有效果!!!
限制:它是收费的。 机会:可以有两周的免费试用;另外可以给Scala项目和非商业开源项目免费使用一年 ~~~~~~
喜欢尝鲜的brothers and sisters 可以试一下
Good luck!!!!