事务
<bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<!-- Transactional proxy for the services -->
<bean id="hibernateTxProxy" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref bean="hibernateTransactionManager"/></property>
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="do*">PROPAGATION_REQUIRED</prop>
<prop key="import*">PROPAGATION_REQUIRED</prop>
</props>
</property>
<property name="target"><bean class="db.BaseBiz" autowire="byName"/></property>
</bean>
Dao 继承基类
org.springframework.orm.hibernate3.support.HibernateDaoSupport
JdbcTemplate插入mysql后返回id值
public int insert(final String sql) throws Exception {
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
PreparedStatement ps = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
return ps;
}
}, keyHolder);
Map map = (Map)keyHolder.getKeyList().get(0);
return Integer.valueOf(map.get("GENERATED_KEY").toString());
}
struts Action代理
org.springframework.web.struts.DelegatingActionProxy
web.xml
<display-name>test11</display-name>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>test11</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
<!--动态的改变记录级别和策略,不需要重启Web应用-->
<!--把log文件定在 /WEB-INF/logs/ 而不需要写绝对路径。log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/myfuse.log-->
<!--可以把log4j.properties和其他properties一起放在/WEB-INF/ ,而不是Class-Path。-->
<!--.log4jRefreshInterval为60000表示 开一条watchdog线程每60秒扫描一下配置文件的变化-->
org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener>
<listener>
<listener-class><!--它主要负责处理由 JavaBeans Introspector的使用而引起的缓冲泄露-->
org.springframework.web.util.IntrospectorCleanupListener
</listener-class>
</listener>
多个ssh项目无法启动
在web.xml加入以下代码
<display-name>test</display-name>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>test</param-value>
</context-param>
错误处理
java.lang.NoClassDefFoundError: org/hibernate/cfg/HbmBinder$SecondPass
直接删除:hibernate-annotations.jar
spring2加入事物IOC报类型转换错误
错误: Cannot convert value of type [$Proxy0 implementing org.springframework.beans.factory.InitializingBean,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.bwie.Dao] for property 'dao': no matching editors or conversion strategy found
解决办法:
1. <aop:aspectj-autoproxy proxy-target-class="true"/> 启动自动转换cglib注入方式
2. 把cglib-2.2.jar版本换成 cglib-2.1.3.jar
3. 把asm-2.2.3.jar换成asm.jar