首先先得确定整体架构,一老同事这样跟我说
如果是应用类系统采用hibernate+spring,前台用extjs
如果是网站,可以直接用jsp+jquery,mvc直接自己写一个url mapping
我因为项目紧急,加上业务比较简单,仅采用spring
搭建好spring架构后,以下简单说一下花时间较多的地方。
一、持久层
其中涉及2个问题
第1个为选用连接池
我分别看了dbcp,proxool的源代码以及他们机制
dbcp是spring推荐使用,可能因为和spring无缝对接吧,但是网上评价不高,
而且依赖appache common-pool
proxool 有重连功能,且稳定性较高
因为赶进度,直接采用spring推荐的dbcp,因为没大规模测试,暂时还没发现有什么问题
第2个就是多数据库源,网上有很多例子,spring自带DynamicDataSource
二:日志记录
这个问题花了蛮多时间研究,因为之前对log4j一直停留在会用,
但是具体原理和配置一直没弄明白,这次研究还是收获蛮大,原来我以前接触的项目
其中用的log4j都没用到它的核心,而且使用也不是按作者本意进行。
log4j有2个概念,logger和appender,一个logger可以指定多个appender,一个appender可以服务多个logger的核心理念就是根据包名来控制日志级别,如我能控制到某个包如(org.springframework)下显示级别,这对我们调试问题提供了很大的灵活度
appender 主要控制输出,包括输出文件,格式等
关于日志还有一个概念,在appache下有2个子项目
一个是appache.common.logger类似hibernate的stf 日志门面,
一个是appache.logger
第一个是日志通用接口,日志门面,提供简单的控制台日志输出
第二可以说是第一个的实现,我们面向第一个进行编程,具体实现看个人喜好,可以采用
appache.logger或者logback
三:单元测试
说到单元测试,得说一些项目目录结构,我是采用src/main和sr/test
然后单元测试类的包名和被测试类一致
采用spring进行单元测试主要就是考虑如何加载applicationcontext
我抽想一个顶层测试类,该类继承AbstractJUnit4SpringContextTests,然后@ContextConfiguration进行置文件,且静态调用环境初始化方法(因为我想把db配置文件和日志配置文件统一到工程外,这就需要项目里引用的路径都是采用绝对路径,因为相对路径引用配置文件只能在工程内)
四:接口服务
因为我做的是一个支付中心,需要对外提供接口,研究了一下spring,几种主流方式(
soap,http,hessian,rmi等)都支持,为了简单起见,采用http,spring对http协议进行了封装(HttpInvokerServiceExporter),可以面向对象进行操作,底层通信交给spring。
五:编译环境
坚持web-inf\lib下不留jar,全部采用user_libray的方式。主要基于以下2个考虑
1、对jar进行分类管理,这样能清楚每一个jar的用途,而不会想以前不管有用没用都向lib里放
2、为以后改成maven项目做基础,因为项目紧迫,暂时没时间研究maven
六:spring
基本采用spring提供的注解 用到@service,@autowired
其中遇到一个问题就是servlet和filter中注入问题
因为servet和filter不属于spring容器管理,
不过这个问题spring都考虑到了,例如filer提供DelegatingFilterProxy
另外说一下spring自带的jdbcTemplate不怎么好用,调用存储过程的方法更是让我苦恼不少,最后研究了半天还是采用jdbc的connection.prepareCall方法
而且加载对象得写RowMapper感觉很麻烦,有时间还是想改成hibernate,感觉jdbcTemplate有点四不像,没有jdbc灵活,又没有hibernate那么丰满
如果是应用类系统采用hibernate+spring,前台用extjs
如果是网站,可以直接用jsp+jquery,mvc直接自己写一个url mapping
我因为项目紧急,加上业务比较简单,仅采用spring
搭建好spring架构后,以下简单说一下花时间较多的地方。
一、持久层
其中涉及2个问题
第1个为选用连接池
我分别看了dbcp,proxool的源代码以及他们机制
dbcp是spring推荐使用,可能因为和spring无缝对接吧,但是网上评价不高,
而且依赖appache common-pool
proxool 有重连功能,且稳定性较高
因为赶进度,直接采用spring推荐的dbcp,因为没大规模测试,暂时还没发现有什么问题
第2个就是多数据库源,网上有很多例子,spring自带DynamicDataSource
二:日志记录
这个问题花了蛮多时间研究,因为之前对log4j一直停留在会用,
但是具体原理和配置一直没弄明白,这次研究还是收获蛮大,原来我以前接触的项目
其中用的log4j都没用到它的核心,而且使用也不是按作者本意进行。
log4j有2个概念,logger和appender,一个logger可以指定多个appender,一个appender可以服务多个logger的核心理念就是根据包名来控制日志级别,如我能控制到某个包如(org.springframework)下显示级别,这对我们调试问题提供了很大的灵活度
appender 主要控制输出,包括输出文件,格式等
关于日志还有一个概念,在appache下有2个子项目
一个是appache.common.logger类似hibernate的stf 日志门面,
一个是appache.logger
第一个是日志通用接口,日志门面,提供简单的控制台日志输出
第二可以说是第一个的实现,我们面向第一个进行编程,具体实现看个人喜好,可以采用
appache.logger或者logback
三:单元测试
说到单元测试,得说一些项目目录结构,我是采用src/main和sr/test
然后单元测试类的包名和被测试类一致
采用spring进行单元测试主要就是考虑如何加载applicationcontext
我抽想一个顶层测试类,该类继承AbstractJUnit4SpringContextTests,然后@ContextConfiguration进行置文件,且静态调用环境初始化方法(因为我想把db配置文件和日志配置文件统一到工程外,这就需要项目里引用的路径都是采用绝对路径,因为相对路径引用配置文件只能在工程内)
四:接口服务
因为我做的是一个支付中心,需要对外提供接口,研究了一下spring,几种主流方式(
soap,http,hessian,rmi等)都支持,为了简单起见,采用http,spring对http协议进行了封装(HttpInvokerServiceExporter),可以面向对象进行操作,底层通信交给spring。
五:编译环境
坚持web-inf\lib下不留jar,全部采用user_libray的方式。主要基于以下2个考虑
1、对jar进行分类管理,这样能清楚每一个jar的用途,而不会想以前不管有用没用都向lib里放
2、为以后改成maven项目做基础,因为项目紧迫,暂时没时间研究maven
六:spring
基本采用spring提供的注解 用到@service,@autowired
其中遇到一个问题就是servlet和filter中注入问题
因为servet和filter不属于spring容器管理,
不过这个问题spring都考虑到了,例如filer提供DelegatingFilterProxy
另外说一下spring自带的jdbcTemplate不怎么好用,调用存储过程的方法更是让我苦恼不少,最后研究了半天还是采用jdbc的connection.prepareCall方法
而且加载对象得写RowMapper感觉很麻烦,有时间还是想改成hibernate,感觉jdbcTemplate有点四不像,没有jdbc灵活,又没有hibernate那么丰满