做项目时经常需要有后台程序进行定期更新数据库的需要,一般做法都是定义一个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 MVC+easyUI+mybatis开发网站后台管理系统(源码+sql文件) urls.properties中需要修改为你本地的静态文件的访问路径。 使用Java平台,采用SpringMVC+Mybatis等主流框架. 数据库:使用免费MYSQL. 前端:...
本文是开发基于spring的web应用的入门文章,前端采用Struts MVC框架,中间层采用spring,后台采用Hibernate。 本文包含以下内容: •配置Hibernate和事务 •装载Spring的applicationContext.xml文件 •...
后台的查询功能单独用类StudentDao封装(与Action类脱离),StudentDao使用Spring创建,StudentDao中支持参数flag,0时直接使用静态数据查询,1时使用hibernate查询数据库,flag值采用Spring方式赋值(在xml中配置)
类比下,就是Spring MVC中实现Controller接口的那些AbstractController之类; 6. 在视图层,对页面元素(css/js/image)等,尤其是其路径,做了大量的约定以便于开发保持一致,具体看Public目录,(偶比较喜欢JQuery...
数据库:使用免费MYSQL 前端:使用Jquery和Easyui技术.界面清晰简洁,易操作 权限:对菜单,按钮控制.仅展示有权限的菜单和按钮. 拦截:对所有无权限URL进行拦截,防止手动发送HTTP请求,确保系统全性. 代码生成:根据...
数据库:使用免费MYSQL 前端:使用Jquery和Easyui技术.界面清晰简洁,易操作 权限:对菜单,按钮控制.仅展示有权限的菜单和按钮. 拦截:对所有无权限URL进行拦截,防止手动发送HTTP请求,确保系统全性. 代码生成:根据...
该项目使用的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-...
数据库:使用免费MYSQL 前端:使用Jquery和Easyui技术.界面清晰简洁,易操作 权限:对菜单,按钮控制.仅展示有权限的菜单和按钮. 拦截:对所有无权限URL进行拦截,防止手动发送HTTP请求,确保系统全性. 代码生成:根据...
数据库:使用免费MYSQL 前端:使用Jquery和Easyui技术.界面清晰简洁,易操作 权限:对菜单,按钮控制.仅展示有权限的菜单和按钮. 拦截:对所有无权限URL进行拦截,防止手动发送HTTP请求,确保系统全性. 代码生成:根据...
spring-boot-action-framework 结构化spring boot项目 业务分离,架构分离,实际开发中可以使用 spring-boot-actuator 监控 spring boot 监控 spring-boot-admin 监控 实现监控系统 spring-boot-jpa 数据库中间件 ...
struts2 的 Action 使用 spring 注解,被 spring 管理 @Controller spring 表现层 bean @Scope 配置 Action 为多例 Spring Data JPA 代替了 Hibernate "CURD " 但是和Hibernate一样 实现DAO(数据)层的功能 "增...
2.jsp页面如何提交到后台Action,如何把Action中的数据通过Hibernate保存到后台数据库,以及把数据库中数据展现到jsp中的全部源码. 另外: struts2,hibernate,spring三个框架的jar包,请在csdn中下载ssh2_lib.rar文件,...
该demo是一个Spring4.1.3+SpringMVC+Mybatis整合而成的demo(使用sqlSessionFactory和MapperScannerConfigurer自动扫描*Mapper....为了方便,没有使用jsp提交action到后台,而是通过自定义监听类测试能否读写数据库。
数据库:使用免费MYSQL 前端:使用Jquery和Easyui技术.界面清晰简洁,易操作. 权限:对菜单,按钮控制.仅展示有权限的菜单和按钮. 拦截:对所有无权限URL进行拦截,防止手动发送HTTP请求,确保系统全性. 代码生成:根据...
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...
能够实现后台对用户、订单、商品的管理。 操作注意事项 一:进用后台地址为:http://localhost:8080/Shop/admin/user/user_login.html 本系统的后台用户名为:admin,密码为:admin。 二:系统注册页面中...
cn.itcast.elec.web.action:系统控制层,负责页面和项目后台的跳转 cn.itcast.elec.web.form:封装值对象(VO对象),对应页面传递的表单值的属性 junit:测试类 * 配置文件 放置到src的目录下: beans.xml:...
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整合...
使用技术:spring+Struts+hibernate+bootstrap+jquery+ajax 源码描述 SSH开发一个前台结算,前台点餐,后台综合信息管理,后厨配菜的完整源码 登陆:前后台同用一个登陆页面,登陆等过用户名访问数据库获取该对象...
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 分页...