`
fishergay
  • 浏览: 33962 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Struts2.12+Spring3.2+hibernate4.2集成1

    博客分类:
  • SSH
 
阅读更多

 

 

1. 最近准备开发新项目,打算整合一个SSH作为基础模板,最初的设想是使用SSH的,后期决定想尝试一下spring mvc3.2+ hibernate4.2+spring3.2 core + ehcache + shiro 作为开发架构,不过先提供SSH集成的方案作为模板,以方便以后用到可以直接使用(struts2.3.12+ hibernate4.2+spring3.2 core + ehcache + shiro) 第一次写博客文章, 写得不太好, 在此作为养成一个写博客习惯开始吧。

 

 

2.首选到官网上面把SSH相关的文件下载下来并解压,我下载的都是带文档版本的。

 



3. 
eclipse中创建一个java web 项目, 我使用的是myeclipse6.0 + tomcat6


 

4. 在解压了spring-framework-3.2.2.RELEASE-dist.zip之后有个libs目录, 把下面的jar文件都拷贝到WEB-INF/lib 目录下面, -source.jar 或者-javadoc.jar结尾的不用拷贝,都是相关jar包的文档和源码,有几个jar文件我没有拷贝,因为考虑到太多没用jar包,没有使用到相关功能,如果你怕麻烦,你也可以全部拷贝。为了使用aop技术还得加入下面3jar文件,spring3.2里面没有自带这3jar包, 我是从spring 2.5.6的发布包里面拷贝出来的。  

aopalliance.jar  aspectjrt.jar  aspectjweaver.jar

 

 



 

5. 在解压了hibernate-release-4.2.0.Final.zip之后有个lib目录, 把required目录下所有jar文件都拷贝到WEB-INF/lib 目录下面(这个是hibernate的核心文件),项目中使用到了数据连接池和ehcache, 需要把optional目录下的c3p0ehcache两个目录下所有jar包一并拷贝到WEB-INF/lib 目录下面,如果你的项目中没有使用到,可以不加入。

lib目录下面有个jpa目录,也把hibernate-entitymanager-4.2.0.Final.jar文件拷贝到WEB-INF/lib 目录下面, 用到jpa的注解来映射实体类到数据库的,  还得把日志相关的jar包拷如, commons-logging-1.1.1.jar  log4j-1.2.17.jar  slf4j-api-1.7.5.jar  slf4j-log4j12-1.7.5.jar上面hibernate4.2 lib目录ehcache包含了一个slf4j-api-1.6.1.jar 需要删掉,我替换成新版版本了。 我使用的mysql数据库 把相关驱动包拷如 mysql-connector-java-5.0.8-bin.jar



 

如果使用新版本替换,记住删除slf4j-api-1.6.1.jar 否则冲突

6. 整合spring和hibernate, 此处把hibernate交给spring来管理,在项目src下面添加spring的配置文件applicationContext-Root.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
	       http://www.springframework.org/schema/beans
	       http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
	       http://www.springframework.org/schema/tx
	       http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
	       http://www.springframework.org/schema/aop
	       http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
	       http://www.springframework.org/schema/context
	       http://www.springframework.org/schema/context/spring-context-3.2.xsd">
    
    <!-- 开启aop注解支持 -->
    <aop:aspectj-autoproxy/>
    
    <!-- 开启注解bean扫描 -->
	<context:component-scan base-package="com.lysoft"/>  
	
	<!-- 数据源配置 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
	  <property name="driverClass" value="com.mysql.jdbc.Driver"/>
	  <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ssh2?useUnicode=true&amp;characterEncoding=UTF-8"/>
	  <property name="user" value="root"/>
	  <property name="password" value="textliang2010"/>
	  <!--连接池中保留的最小连接数。-->
	  <property name="minPoolSize" value="2" />
	  <!--连接池中保留的最大连接数。-->
	  <property name="maxPoolSize" value="100" />
	  <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。-->
	  <property name="maxIdleTime" value="1800" />
	  <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。-->
	  <property name="acquireIncrement" value="2" />
	  <property name="maxStatements" value="0" />
	  <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。-->
	  <property name="initialPoolSize" value="2" />
	   <!--每60秒检查所有连接池中的空闲连接。-->
	  <property name="idleConnectionTestPeriod" value="1800" />
	  <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 --> 
	  <property name="acquireRetryAttempts" value="30" />
	  <!--
	  	获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效
		保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试
		获取连接失败后该数据源将申明已断开并永久关闭。Default: false
	  -->
	  <property name="breakAfterAcquireFailure" value="true" />
	  <!--
	   	因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的
         时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
         等方法来提升连接测试的性能。Default: false 
      -->
	  <property name="testConnectionOnCheckout" value="false" />
	</bean>
    
    <!-- 配置SessionFactory -->
  	<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    	<property name="dataSource" ref="dataSource"/>
    	<property name="packagesToScan" value="com.lysoft.bean"/>
        <property name="hibernateProperties">
            <props>
                <!-- 指定数据库的方言  -->
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <!-- 启动应用时,是否根据Hibernate映射自动创建数据表 -->
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.show_sql">false</prop>
				<prop key="hibernate.format_sql">true</prop>  
				<prop key="hibernate.jdbc.fetch_size">50</prop>
				<prop key="hibernate.jdbc.batch_size">30</prop>
				<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
            </props>
        </property>
    </bean>
	
	<!-- 定义事务管理器 -->
	<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
   		<property name="sessionFactory" ref="sessionFactory"/>
  	</bean>

	<!-- 配置事务的传播特性 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
    	<tx:attributes>
      		<tx:method name="add*" propagation="REQUIRED" />
			<tx:method name="del*" propagation="REQUIRED" />
	        <tx:method name="update*" propagation="REQUIRED" />
	        <!-- hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到 -->
            <tx:method name="get*" propagation="REQUIRED" read-only="true" />  
            <tx:method name="count*" propagation="REQUIRED" read-only="true" />  
            <tx:method name="find*" propagation="REQUIRED" read-only="true" />  
            <tx:method name="list*" propagation="REQUIRED" read-only="true" />  
	        <tx:method name="*" read-only="true"/>
	        
    	</tx:attributes>
  	</tx:advice>

	<!-- 哪些类的哪些方法参与事务  -->
  	<aop:config>
  		<!-- 只对业务逻辑层实施事务 -->  
    	<aop:pointcut id="serviceMethods" expression="execution(* com.lysoft.service..*.*(..))"/>
    	<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods"/>
  	</aop:config>

</beans>

 7. 在src下面添加一个log4j.properties 文件, 方便查看DEBUG 日志。

log4j.rootLogger=DEBUG,console,logfile

log4j.logger.com.lysoft=DEBUG

#apche log
log4j.logger.org.apache.commons=ERROR

#spring log
#log4j.logger.org.springframework=DEBUG
log4j.logger.org.springframework.transaction=DEBUG

#hibernate log
log4j.logger.org.hibernate=DEBUG
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.hql=DEBUG
log4j.logger.org.hibernate.jdbc=DEBUG
log4j.logger.net.sf.ehcache=DEBUG 
log4j.logger.org.hibernate.cache=DEBUG
log4j.logger.org.hibernate.transaction=DEBUG
log4j.logger.org.hibernate.tool.hbm2ddl=DEBUG
log4j.logger.org.hibernate.hql.internal.ast=ERROR

#valuelist log
log4j.logger.net.mlw.vlh=ERROR

#c3p0 log
log4j.logger.com.mchange.v2.resourcepool.BasicResourcePool=DEBUG

#out log to console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%c:%L] - %m%n

# Pattern to output the caller's file name and line number.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-4r %-5p [%d{yyyy-MM-dd HH:mm:ss}]  %m%n

#out log to file
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${ssh.root}/WEB-INF/error.log
log4j.appender.logfile.MaxFileSize=1024KB
log4j.appender.logfile.MaxBackupIndex=10
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%c:%L] - %m%n

 

 

 

  • 大小: 11.4 KB
  • 大小: 44.9 KB
  • 大小: 20.5 KB
  • 大小: 15.5 KB
分享到:
评论
1 楼 sunlongan666 2013-05-23  
你提供的东西,跑起来会有错误,希望下次能改进提供一个无措的版本

相关推荐

    Struts2.12+Spring3.2+hibernate4.2集成示例代码

    Struts2.12、Spring3.2和Hibernate4.2是Java开发中经典的MVC框架集合,常用于构建企业级Web应用。这个集成示例代码提供了如何将这三个框架协同工作的详细步骤,使得开发者能够更好地理解和掌握它们的交互机制。 ...

    Spring攻略(第二版 中文高清版).part1

    6.3 将Spring与Struts 1.x集成 220 6.3.1 问题 220 6.3.2 解决方案 220 6.3.3 工作原理 220 6.4 将Spring与JSF集成 226 6.4.1 问题 226 6.4.2 解决方案 226 6.4.3 工作原理 227 6.5 将Spring与DWR...

    Spring攻略(第二版 中文高清版).part2

    6.3 将Spring与Struts 1.x集成 220 6.3.1 问题 220 6.3.2 解决方案 220 6.3.3 工作原理 220 6.4 将Spring与JSF集成 226 6.4.1 问题 226 6.4.2 解决方案 226 6.4.3 工作原理 227 6.5 将Spring与DWR...

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

    JAVA项目开发全程实录(含电子书和所有源代码)

    (Swing+Hibernate+Oracle实现) 101 教学视频:2小时53分 3.1 开发背景 102 3.2 系统分析 102 3.3 系统设计 102 3.3.1 系统目标 102 3.3.2 系统功能结构 102 3.3.3 系统预览 104 3.3.4 业务流程图 105 3.3.5 文件夹...

Global site tag (gtag.js) - Google Analytics