在未使用框架进行编程的时候,我们常常在web.xml中加上这样一段话 

<listener>
        <listener-class>XXX</listener-class>
  </listener>

  在对应的类中实现ServletContextListener接口,这样在服务器已启动的时候,就会加载相应的程序

  但是现在在spring为我们提供了它特有的方法

  

在spring启动时自动调用一些db操作作缓存,于是在service实现ApplicationListener 接口

并重写onApplicationEvent操作。这样就实现了要求,代码如下:

 

@Service
@Scope("singleton")
public class MasterServiceImpl implements ApplicationListener {
    public void onApplicationEvent(ApplicationEvent arg0) {
        一些DB操作
    }
}
 由于我们是spring托管事务,并且采用注入方式调用。

  这样的写法带来了一些问题,正常的action注入service调用的时候再事务范围内,出事务的时候会对DB连接进行释放,

  因为是这个service是系统启动直接调用的这些方法,不在事务管理范围内,于是这些DB的操作没有进行DB连接释放(关闭)。

  解决办法是,写一个专门的action实现ApplicationListener 接口,在这个action重新的onApplicationEvent方法内,

  调用该单例service,从而实现事务的入口登记,在出事务的时候就可以自动释放连接了。

相关文章:

  • 2022-02-19
  • 2022-01-10
  • 2021-07-29
  • 2021-11-24
  • 2021-05-16
  • 2022-03-04
  • 2022-12-23
  • 2021-10-31
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-07-03
  • 2022-01-14
  • 2021-11-18
  • 2021-08-08
  • 2021-11-03
相关资源
相似解决方案