学到的一些东西

8月 10th, 2013 2,234 留下评论 阅读评论

暑假在天猫实习,从头开始参与一个项目。项目虽小,五脏俱全,虽然自己实现的是一个十分简单如果完全用自己的环境和习惯写代码不用一天就能完成的任务,结果就是因为搭上了淘宝整个系统和环境,变得十分复杂,而且还要和其他team约定接口联调测试,还要和测试、DBA、前台、PD(产品经理)等打交道。

相比本科的百度上海那时候的实习经历,最大的区别就是那时候完全就用一套开源的简单的东西,能多简单能跑起来就好,几乎没有和百度已有的平台去接通(除了一块不是我负责的登陆系统),打交道的主要就是一位前端,再后来就是一个测试,没有接触太多的人和其他的技术。

下面是项目里碰到几个自己当时解决不了,在景升和楚帅的帮忙下(耗费较长时间debug啊)给解决的,挺有意思的。

Spring加载properties配置文件

<context:property-placeholder location="/WEB-INF/jdbc.properties" />
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="locations">
		<list>
			<value>classpath:jdbc.properties</value>
		</list>
	</property>
</bean>

标签和PropertyPlaceholderConfigurer这个Bean的实现是一个原理,所以如果同时出现在标签中,之后出现的那个会被忽略(Bean已存在),导致后一个的配置文件加载失败。所以应该推荐使用PropertyPlaceholderConfigurer的方式加载多个配置文件,并且将这个Bean放在最顶层的Beans配置文件中,供所以开发者使用。

特殊化/项目化的配置文件名

由于习惯,Spring的配置文件applicationContext.xml、ibatis的配置文件sql-map.xml等随处可见,当项目庞大之后,很难保证引入的第三方jar包内没有这些同名文件,弄不好因为classpath加载顺序在加载”classpath:sql-map.xml”时加载了错误的xml文件而百思不得其解。

反正这些配置文件再加载时,都在可以自定义文件名的,所以给一个namespace是比较好的习惯,比如appname_sql-map.xml。

追寻jar包

Maven只能帮助构建项目依赖,具体运行时,还是依赖classpath,服务器和本地机器环境不可能完全相同,越是复杂的环境越容易加载错jar包,导致版本不一致,而导致错误。
可以通过class.getProtectionDomain().getCodeSource().getLocation()获得jar包的URL对象,进行日志打印就可以知道此class所属的jar包的具体路径信息,以此判断运行状况是否符合期望。

Eclipse远程断点调试

只要服务器和本地的代码完全一致,在Debug模式下的Open Debug Dialog,左侧菜单最后一个Remote Java Application,填写了项目、IP和端口后,设了断点就可以按右下角Debug进行断点。不过对服务器进行断点容易造成服务器崩溃…小心使用。

Categories: Java 标签:
  1. 8月 25th, 2013 18:30

    最讨厌这堆配置文件了 :-x

    • 嘿嘿…我家网络罩杯好大, :mrgreen: 太有才了!