做项目时经常需要有后台程序进行定期更新数据库的需要,一般做法都是定义一个listener,在应用启动时添加一个Timer,然后定期执行。而Timer需要传入一个继承TimerTask的线程类(姑且这么说吧),更新数据库的操作就写在这个类里,那么就需要在这个类里调用到service,Dao之类的东西,找了好久都没有找到解决方案。不是Hibernate的sessionFactory困扰,就是no session之类的错误,最后又想到如何获取到spring配置文件中sessionFactory。
获取spring配置中的sessionFactory这个方法是可以的,的确可以得到各种操作,但是会报Create an new Instance Cachemanager这个警告,似乎是重新实例化了一个HibernateSessionFactory的缓存管理器,而且最要命的是任务执行了10来次之后就会抛出通信异常,不知道何解。该方法被放弃了!
最后想到了把这个任务类也变成一个service,这样就可以通过spring管理自动注入相应同时还把该类注解成@Transactional纳入事务管理,并把需要操作的相关Dao也注解进来,这样就可以在run方法中得到引用,而且这个类也能通过spring的注入获取到了操作数据库的各种需要。
在listener通过spring工具类获取到这个任务类的Bean,只要把这个实例化的bean传给timer就OK了
timer = new java.util.Timer(true); event.getServletContext().log("定时任务已启动"); // 20秒扫描一次 需要执行的线程任务 延迟一分钟执行 SmsUtils sms = (SmsUtils) SpringBeanUtils.getBean("smsUtils", event.getServletContext()); timer.schedule(sms, 60 * 1000, 20 * 1000); event.getServletContext().log("短信发送任务已经添加调度表");
SpringBeanUtils.getBean方法中获取bean的方法
/** * 获取bean * * @param beanName * @param servletContext上下文 * @return */ public static Object getBean(String beanName, ServletContext servletContext) { ApplicationContext ctx = WebApplicationContextUtils .getWebApplicationContext(servletContext); return ctx.getBean(beanName); }
这个上下文可以在listener中获取,剩下的就等着任务循环的执行了!
不过这个方法会不会导致其他负面的影响尚不得知
相关推荐
* 广泛的应用场景:Spring Security 可以应用于多种应用场景,例如 web 应用、后台服务等。 * 高度可配置性:Spring Security 的配置项非常灵活,可以根据实际需求进行配置。 Spring Security 是一个功能强大且灵活...
2. **Spring**:Spring框架在后台管理了所有的bean,包括Struts2的Action、Service、DAO等。它通过IoC(控制反转)和AOP(面向切面编程)来解耦各个组件,提高代码的可维护性。例如,Service层的接口和实现类、...
3. **新闻发布和检索**:使用Hibernate的Criteria或HQL(Hibernate Query Language)进行复杂查询,结合Struts1的Action和ActionForm实现新闻发布和展示。 4. **新闻评论**:通过Spring的Service层处理评论的添加、...
这个压缩包文件包含了一个基于SSH(Struts2、Spring、Hibernate)实现的投票系统后台,下面将详细介绍这三个框架及其在该系统中的作用。 1. Struts2:Struts2是一个开源的MVC框架,它继承了Struts1的优点并解决了其...
《Spring Batch in Action》是一本深入探讨Spring Batch框架的书籍,由Arnaud Cogoluègnes、Thierry Templier、Gary Gregory和Olivier Bazoud共同编写,Manning出版社出版。这本书旨在帮助读者理解和掌握如何使用...
总的来说,"基于SSH框架实现的新闻后台管理系统"是一个综合性的项目,涵盖了Java Web开发的多个重要方面,包括前端请求处理、数据库操作、业务逻辑实现以及用户权限控制。这个项目为学习和实践Java Web开发提供了一...
Struts2与Spring的整合使得我们可以直接在Spring容器中声明和管理Action,实现请求的转发和结果的渲染。 接着,MyBatis是数据库操作的利器,它允许开发者直接编写SQL语句,将SQL与Java代码紧密结合,避免了...
Struts、Spring 和 Hibernate 是Java Web开发中的三大框架,它们的集成使用可以帮助开发者构建高效、模块化且易于维护的企业级应用程序。在这个经典权限管理系统中,这三者协同工作,为系统提供了模型-视图-控制器...
### Spring Batch In Action #### 知识点一:Spring Batch 的简介 - **Spring Batch** 是一个基于 Java 的强大框架,专门设计用于处理大规模数据批处理任务。 - 它为开发人员提供了一套完整的工具来构建高效、可靠...
它通过Action类处理用户请求,使用配置文件(struts-config.xml)来定义Action与JSP视图之间的映射关系。在这个博客系统中,Struts负责接收用户操作,调用业务逻辑,并将结果传递给视图层展示。 2. **Hibernate框架...
这里的业务逻辑主要由Spring管理的服务类实现,使用Hibernate操作数据库。 3. 回帖模块:用户对主题进行回复,支持表情、图片等富文本内容。Struts 2 处理回帖请求,将内容传递给后台服务,服务类通过Hibernate保存...
在本项目中,Spring主要负责管理Bean,如数据库连接池、事务管理、DAO和Service等。通过Spring的AOP,我们可以方便地实现事务控制和日志记录。同时,Spring与Struts2可以通过Spring-Struts2插件无缝集成,使得Action...
电影后台管理系统是一个典型的Web应用程序,它使用了Spring、Struts2和Hibernate这三大框架,以及前端的EasyUI组件库来实现高效、稳定的管理功能。这个系统没有采用Maven作为项目构建工具,而是采取了传统的手动依赖...
【拍卖系统(Struts1+Spring+Hibernate)Mysql数据库】是一个基于经典的SSH(Struts1、Spring、Hibernate)框架的Web应用实例,用于实现拍卖业务功能。SSH框架结合Mysql数据库,为开发者提供了一个高效、稳定且易于...
在实际的项目搭建过程中,首先会配置好各框架的环境,包括数据库连接、Spring的bean配置、Structs2的action配置等。然后,开发者会在ExtJS4中创建UI组件,通过Ajax请求与后台交互。Structs2接收到请求后,通过Spring...
spring MVC+easyUI+mybatis开发网站后台管理系统(源码+sql文件) urls.properties中需要修改为你本地的静态文件的访问路径。 使用Java平台,采用SpringMVC+Mybatis等主流框架. 数据库:使用免费MYSQL. 前端:...
7. **实现业务逻辑**:编写UserService和UserDAO接口及其实现类,UserService处理业务逻辑,UserDAO负责数据库操作。 8. **创建视图**:设计JSP页面,用于用户输入和展示结果,使用Struts的标签库简化页面开发。 9. ...
3. Spring管理的Service层处理业务逻辑,可能需要通过Hibernate查询或更新数据库中的新闻记录。 4. Service层完成操作后,返回结果给Struts。 5. Struts根据返回的结果,决定转发到哪个JSP页面进行展示,或者返回...
6. **业务逻辑实现**:在Struts2的Action类中编写业务逻辑,通过Spring管理的Service层调用DAO层进行数据操作,使用Hibernate进行CRUD(创建、读取、更新、删除)操作。 7. **测试与部署**:单元测试各个模块的功能...