`
ggxin
  • 浏览: 41181 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

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 MVC+easyUI+mybatis开发的网站后台管理系统源码(包括数据库)

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

    Struts+Spring+Hibernate快速入门

    本文是开发基于spring的web应用的入门文章,前端采用Struts MVC框架,中间层采用spring,后台采用Hibernate。  本文包含以下内容:  •配置Hibernate和事务  •装载Spring的applicationContext.xml文件  •...

    spring+hibernate实现学生查询

    后台的查询功能单独用类StudentDao封装(与Action类脱离),StudentDao使用Spring创建,StudentDao中支持参数flag,0时直接使用静态数据查询,1时使用hibernate查询数据库,flag值采用Spring方式赋值(在xml中配置)

    ThinkPHP Increx数据库应用系统开发平台

    类比下,就是Spring MVC中实现Controller接口的那些AbstractController之类; 6. 在视图层,对页面元素(css/js/image)等,尤其是其路径,做了大量的约定以便于开发保持一致,具体看Public目录,(偶比较喜欢JQuery...

    后台管理系统源代码spring MVC+easyUI+mybatis

    数据库:使用免费MYSQL 前端:使用Jquery和Easyui技术.界面清晰简洁,易操作 权限:对菜单,按钮控制.仅展示有权限的菜单和按钮. 拦截:对所有无权限URL进行拦截,防止手动发送HTTP请求,确保系统全性. 代码生成:根据...

    spring MVC+easyUI+mybatis开发网站后台管理系统源代码

    数据库:使用免费MYSQL 前端:使用Jquery和Easyui技术.界面清晰简洁,易操作 权限:对菜单,按钮控制.仅展示有权限的菜单和按钮. 拦截:对所有无权限URL进行拦截,防止手动发送HTTP请求,确保系统全性. 代码生成:根据...

    (2.0版本)自己写的struts2+hibernate+spring实例

    该项目使用的jar包为以下. spring-beans.jar xwork-2.0.4.jar spring-context.jar ognl-2.6.11.jar spring-web.jar spring-core.jar struts2-core-2.0.11.1.jar commons-logging-...

    spring MVC+easyUI+mybatis开发网站后台管理系统

    数据库:使用免费MYSQL 前端:使用Jquery和Easyui技术.界面清晰简洁,易操作 权限:对菜单,按钮控制.仅展示有权限的菜单和按钮. 拦截:对所有无权限URL进行拦截,防止手动发送HTTP请求,确保系统全性. 代码生成:根据...

    spring MVC+easyUI+mybatis开发网站后台管理系统(源码)

    数据库:使用免费MYSQL 前端:使用Jquery和Easyui技术.界面清晰简洁,易操作 权限:对菜单,按钮控制.仅展示有权限的菜单和按钮. 拦截:对所有无权限URL进行拦截,防止手动发送HTTP请求,确保系统全性. 代码生成:根据...

    java8集合源码分析-spring-boot-frank:SpringBoot2.0.0.R以上版本的例子,包含邮件、报表、权限、以及后台管

    spring-boot-action-framework 结构化spring boot项目 业务分离,架构分离,实际开发中可以使用 spring-boot-actuator 监控 spring boot 监控 spring-boot-admin 监控 实现监控系统 spring-boot-jpa 数据库中间件 ...

    BOS 技术整理

    struts2 的 Action 使用 spring 注解,被 spring 管理 @Controller spring 表现层 bean @Scope 配置 Action 为多例 Spring Data JPA 代替了 Hibernate "CURD " 但是和Hibernate一样 实现DAO(数据)层的功能 "增...

    ssh2_src.rar

    2.jsp页面如何提交到后台Action,如何把Action中的数据通过Hibernate保存到后台数据库,以及把数据库中数据展现到jsp中的全部源码. 另外: struts2,hibernate,spring三个框架的jar包,请在csdn中下载ssh2_lib.rar文件,...

    Spring+SpringMVC+Mybatis简单Demo

    该demo是一个Spring4.1.3+SpringMVC+Mybatis整合而成的demo(使用sqlSessionFactory和MapperScannerConfigurer自动扫描*Mapper....为了方便,没有使用jsp提交action到后台,而是通过自定义监听类测试能否读写数据库。

    j2ee+spring mvc+Mybatis+mysql+easy ui+Jquery主流框架集成后台管理系统

    数据库:使用免费MYSQL 前端:使用Jquery和Easyui技术.界面清晰简洁,易操作. 权限:对菜单,按钮控制.仅展示有权限的菜单和按钮. 拦截:对所有无权限URL进行拦截,防止手动发送HTTP请求,确保系统全性. 代码生成:根据...

    低清版 大型门户网站是这样炼成的.pdf

    2.1.5 struts 2的业务控制器action实现 39 2.1.6 struts 2的处理结果result 45 2.1.7 功能强大的表达式语言ognl 47 2.1.8 struts 2的运行流程分析—helloworld 48 2.1.9 struts 2的异常处理 52 2.2 struts 2...

    MF00140-java网络商城源码.zip

    能够实现后台对用户、订单、商品的管理。 操作注意事项   一:进用后台地址为:http://localhost:8080/Shop/admin/user/user_login.html    本系统的后台用户名为:admin,密码为:admin。 二:系统注册页面中...

    SSH 项目框架搭建总结

    cn.itcast.elec.web.action:系统控制层,负责页面和项目后台的跳转 cn.itcast.elec.web.form:封装值对象(VO对象),对应页面传递的表单值的属性 junit:测试类 * 配置文件 放置到src的目录下: beans.xml:...

    JAVA程序开发大全---上半部分

    10.5 使用MyEclipse实现Spring框架中的AOP编程 173 10.5.1 向项目添加AOP支持包 173 10.5.2 创建Bean类 173 10.5.3 创建前置通知类 174 10.5.4 装配拦截qi和配置Bean类 175 10.5.5 编写测试代码 176 10.6 Spring整合...

    MF00617-JAVA餐厅点餐管理源码.zip

    使用技术:spring+Struts+hibernate+bootstrap+jquery+ajax 源码描述 SSH开发一个前台结算,前台点餐,后台综合信息管理,后厨配菜的完整源码 登陆:前后台同用一个登陆页面,登陆等过用户名访问数据库获取该对象...

    《MyEclipse 6 Java 开发中文教程》前10章

    9.4.3 使用新建Form,Action和JSP的向导创建关键组件 176 9.4.4 调整生成的代码 180 9.4.5 发布,运行并测试 183 9.4.6 练习题:如何用JDBC实现登录? 184 9.5 编写Struts整合Hibernate的分页应用 184 9.5.1 分页...

Global site tag (gtag.js) - Google Analytics