SH配置中,hibernate不会自动释放session conn程序卡死

在实际应用过程中,发现一个问题,其表现形式为:

在访问数据库时,在多次(8)访问过后就出现容器不在继续访问。

有点像挂起。

 

研究发现,没有配置OpenSessionInViewFilter这个拦截器。

至于为什么,网上大把。主要就是提出没有配置这个,hibernate没有自动flush的功能。

 下面把配置方式放上来。在web.xml文件中添加

<filter>
  <filter-name>hibernateFilter</filter-name>
  <filter-class>
   org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
  </filter-class>
  <init-param>
   <param-name>singleSession</param-name>
   <param-value>true </param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>hibernateFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping> 

 

-----------------------------------------------------------------------------------------------

 

Spring 配置文件

<!-- 事务管理 -->

    <bean id="transactionManager"

       class="org.springframework.orm.hibernate3.HibernateTransactionManager">

       <property name="sessionFactory" ref="sessionFactory"/>

    </bean>

 

    <!-- 配置事务拦截器 -->

    <bean id="transactionInterceptor"

       class="org.springframework.transaction.interceptor.TransactionInterceptor">

       <!--  事务拦截器bean需要依赖注入一个事务管理器 -->

       <property name="transactionManager">

           <ref bean="transactionManager"/>

       </property>

       <property name="transactionAttributes">

           <!--  下面定义事务传播属性-->

           <props>

              <prop key="*">PROPAGATION_REQUIRED</prop>

              <prop key="save*">PROPAGATION_REQUIRED</prop>

              <prop key="update*">PROPAGATION_REQUIRED</prop>

              <prop key="delete*">PROPAGATION_REQUIRED</prop>

           </props>

       </property>

    </bean>

 

    <!-- 定义BeanNameAutoProxyCreator -->

    <bean id="beanNameAutoProxyCreator"

       class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">

       <property name="beanNames">

           <list>

              <value>*DAO</value>

           </list>

       </property>

       <property name="interceptorNames">

           <list>

              <idref local="transactionInterceptor"/>

           </list>

       </property>

       <property name="proxyTargetClass" value="true"/>

    </bean>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在应用程序实现读写分离的方法主要有两种,一种是通过代码实现,另一种是通过间件实现。下面是一个通过代码实现的示例: ``` import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBUtil { private static final String MASTER_URL = "jdbc:mysql://master_ip:3306/test_db"; private static final String SLAVE_URL1 = "jdbc:mysql://slave1_ip:3306/test_db"; private static final String SLAVE_URL2 = "jdbc:mysql://slave2_ip:3306/test_db"; private static final String USERNAME = "root"; private static final String PASSWORD = "123456"; // 获取主库连接 public static Connection getMasterConnection() throws SQLException { Connection conn = DriverManager.getConnection(MASTER_URL, USERNAME, PASSWORD); return conn; } // 获取从库连接 public static Connection getSlaveConnection() throws SQLException { int random = (int) (Math.random() * 2); // 随机选择一个从库 String url = random == 0 ? SLAVE_URL1 : SLAVE_URL2; Connection conn = DriverManager.getConnection(url, USERNAME, PASSWORD); return conn; } } ``` 在上述示例,我们定义了三个数据库连接URL,其一个是主库的URL,另外两个是两个从库的URL。当需要获取主库连接时,直接调用`getMasterConnection`方法即可;当需要获取从库连接时,先随机选择一个从库的URL,然后调用`getSlaveConnection`方法即可。 需要注意的是,在实现读写分离时,还需要考虑到数据同步的延迟和数据一致性等问题,例如可以通过设置从库的复制延迟时间来控制数据同步的延迟,或者通过在应用程序使用事务来保证数据的一致性等。同时,也可以通过使用间件来实现读写分离,例如MyBatis-Plus、ShardingSphere等,这些间件提供了更为完善的读写分离功能,并且可以通过配置来灵活控制数据同步和数据分片等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值