`

spring实现后台更新数据库,非action使用spring

阅读更多

      做项目时经常需要有后台程序进行定期更新数据库的需要,一般做法都是定义一个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中获取,剩下的就等着任务循环的执行了!

 

不过这个方法会不会导致其他负面的影响尚不得知

 

0
6
分享到:
评论
4 楼 21841625a 2013-05-02  
ggxin 写道
21841625a 写道
此内问题,定义到数据库中,编写存储过程,利用数据库的定时任务或者job自动调用的话,不更好一点吗?


这里面有一点不好就是数据库的迁移麻烦,而且数据库更新了,但是在ssh的界面看到还是缓存的数据。


程序中线程的控制,我觉得是个比较复杂的事情,而且稍微不注意,就会导致性能与内存资源占用的问题。
特殊情况特殊处理,而且一个系统做数据库迁移这个情况也是非常非常的少。类似定时的功能,只要监听的间隔时间不是很短,而且监听后还有一系列业务要处理,我个人还是觉得丢给oracle的job的吧,咱就处理业务,性能,线程控制神马的,统统不管。轻松简单。
3 楼 ggxin 2013-04-28  
21841625a 写道
此内问题,定义到数据库中,编写存储过程,利用数据库的定时任务或者job自动调用的话,不更好一点吗?


这里面有一点不好就是数据库的迁移麻烦,而且数据库更新了,但是在ssh的界面看到还是缓存的数据。
2 楼 21841625a 2013-04-28  
此内问题,定义到数据库中,编写存储过程,利用数据库的定时任务或者job自动调用的话,不更好一点吗?
1 楼 7454103 2013-04-28  
没啥影响,
ps:最好调整下你的配置 是 ApplicationContext  和 web的 ApplicationContext  为同一个!

相关推荐

    Spring Security in Action

    * 广泛的应用场景:Spring Security 可以应用于多种应用场景,例如 web 应用、后台服务等。 * 高度可配置性:Spring Security 的配置项非常灵活,可以根据实际需求进行配置。 Spring Security 是一个功能强大且灵活...

    Struts2SpringHibernate实现简单的添加,分页显示功能例子

    2. **Spring**:Spring框架在后台管理了所有的bean,包括Struts2的Action、Service、DAO等。它通过IoC(控制反转)和AOP(面向切面编程)来解耦各个组件,提高代码的可维护性。例如,Service层的接口和实现类、...

    struts1+spring1+hibernater3写的新闻管理系统后台

    3. **新闻发布和检索**:使用Hibernate的Criteria或HQL(Hibernate Query Language)进行复杂查询,结合Struts1的Action和ActionForm实现新闻发布和展示。 4. **新闻评论**:通过Spring的Service层处理评论的添加、...

    struts2 + spring + hibernate3实现的投票系统后台

    这个压缩包文件包含了一个基于SSH(Struts2、Spring、Hibernate)实现的投票系统后台,下面将详细介绍这三个框架及其在该系统中的作用。 1. Struts2:Struts2是一个开源的MVC框架,它继承了Struts1的优点并解决了其...

    Spring Batch in Action

    《Spring Batch in Action》是一本深入探讨Spring Batch框架的书籍,由Arnaud Cogoluègnes、Thierry Templier、Gary Gregory和Olivier Bazoud共同编写,Manning出版社出版。这本书旨在帮助读者理解和掌握如何使用...

    基于Struts2、hibernate、spring实现的新闻后台管理系统

    总的来说,"基于SSH框架实现的新闻后台管理系统"是一个综合性的项目,涵盖了Java Web开发的多个重要方面,包括前端请求处理、数据库操作、业务逻辑实现以及用户权限控制。这个项目为学习和实践Java Web开发提供了一...

    spring3、struts2、mybatis结合的一个简单web实现

    Struts2与Spring的整合使得我们可以直接在Spring容器中声明和管理Action,实现请求的转发和结果的渲染。 接着,MyBatis是数据库操作的利器,它允许开发者直接编写SQL语句,将SQL与Java代码紧密结合,避免了...

    Struts+spring+hibernate 集成实现的经典权限管理系统源代码

    Struts、Spring 和 Hibernate 是Java Web开发中的三大框架,它们的集成使用可以帮助开发者构建高效、模块化且易于维护的企业级应用程序。在这个经典权限管理系统中,这三者协同工作,为系统提供了模型-视图-控制器...

    Spring Batch In Action

    ### Spring Batch In Action #### 知识点一:Spring Batch 的简介 - **Spring Batch** 是一个基于 Java 的强大框架,专门设计用于处理大规模数据批处理任务。 - 它为开发人员提供了一套完整的工具来构建高效、可靠...

    基于Java实现的博客系统(struts+hibernate+spring)源码+数据库+文档.zip

    它通过Action类处理用户请求,使用配置文件(struts-config.xml)来定义Action与JSP视图之间的映射关系。在这个博客系统中,Struts负责接收用户操作,调用业务逻辑,并将结果传递给视图层展示。 2. **Hibernate框架...

    论坛系统(Struts 2+Hibernate+Spring实现)

    这里的业务逻辑主要由Spring管理的服务类实现,使用Hibernate操作数据库。 3. 回帖模块:用户对主题进行回复,支持表情、图片等富文本内容。Struts 2 处理回帖请求,将内容传递给后台服务,服务类通过Hibernate保存...

    struts2+spring+mybatis+easyui的实现

    在本项目中,Spring主要负责管理Bean,如数据库连接池、事务管理、DAO和Service等。通过Spring的AOP,我们可以方便地实现事务控制和日志记录。同时,Spring与Struts2可以通过Spring-Struts2插件无缝集成,使得Action...

    电影后台管理系统Spring+struts2+Hibernate+easyui

    电影后台管理系统是一个典型的Web应用程序,它使用了Spring、Struts2和Hibernate这三大框架,以及前端的EasyUI组件库来实现高效、稳定的管理功能。这个系统没有采用Maven作为项目构建工具,而是采取了传统的手动依赖...

    拍卖系统 (struts1+spring+hibernate) Mysql数据库

    【拍卖系统(Struts1+Spring+Hibernate)Mysql数据库】是一个基于经典的SSH(Struts1、Spring、Hibernate)框架的Web应用实例,用于实现拍卖业务功能。SSH框架结合Mysql数据库,为开发者提供了一个高效、稳定且易于...

    extjs4 + struct+ spring + hibernate 搭建后台

    在实际的项目搭建过程中,首先会配置好各框架的环境,包括数据库连接、Spring的bean配置、Structs2的action配置等。然后,开发者会在ExtJS4中创建UI组件,通过Ajax请求与后台交互。Structs2接收到请求后,通过Spring...

    spring MVC+easyUI+mybatis开发的网站后台管理系统源码(包括数据库)

    spring MVC+easyUI+mybatis开发网站后台管理系统(源码+sql文件) urls.properties中需要修改为你本地的静态文件的访问路径。 使用Java平台,采用SpringMVC+Mybatis等主流框架. 数据库:使用免费MYSQL. 前端:...

    SSH(Struts、Spring、Hibernate)三大框架整合案例用户注册源码下载

    7. **实现业务逻辑**:编写UserService和UserDAO接口及其实现类,UserService处理业务逻辑,UserDAO负责数据库操作。 8. **创建视图**:设计JSP页面,用于用户输入和展示结果,使用Struts的标签库简化页面开发。 9. ...

    strutshibernatespring实现新闻发布系统

    3. Spring管理的Service层处理业务逻辑,可能需要通过Hibernate查询或更新数据库中的新闻记录。 4. Service层完成操作后,返回结果给Struts。 5. Struts根据返回的结果,决定转发到哪个JSP页面进行展示,或者返回...

    struts2.3+hibernate4.1+spring3.2+EasyUI1.36整合实现的java后台管理系统

    6. **业务逻辑实现**:在Struts2的Action类中编写业务逻辑,通过Spring管理的Service层调用DAO层进行数据操作,使用Hibernate进行CRUD(创建、读取、更新、删除)操作。 7. **测试与部署**:单元测试各个模块的功能...

Global site tag (gtag.js) - Google Analytics