Spring定时器在SSH框架中的应用.
ssh详解
SSH框架整合步骤详解SSH框架 2009-04-09 10:47:00 阅读611 评论0 字号:大中小订阅更系统地学习Struts1.x/Struts2.x+Hibernate+Spring,请学习该开源项目Appfuse终于,终于将SSH整合成功了,弄了几个小时,可以休息了(有的朋友弄了半个月,甚至重装了系统也没弄好,哎,庆幸啊)。
碰到问题千万不要放弃,要相信没有解决不了的问题!项目结构图:jsp部分为:index.jsp;success.jsp;fail.jspUserDAO.java,User.hbm.xml自动生成,HibernateSessionFactory 是多余的。
相关的配置文件、类文件详细信息,请参看Struts+Spring+Hibernate/SSH整合开发详细二以前是整过这三个框架的,可是工作期间都不曾用过,不知不觉之中,学的东西全忘了。
这次又要开始找工作了,看着招聘启事上都写着:要求熟练掌握Struts,Hibernate或Spring框架……,没得办法,重新学呗。
Spring in Action中文版下载地址(ftp协议)ftp://222.214.218.61/book5/20080228/cf8b35cc-5bcd-497 3-b6b7-37ae3ec78391.rar如果无法下载,可以在里重新搜索首先开始搭建项目环境,步骤如下:使用平台:MyEclipse 6.0框架版本:Struts 1.2 Hibernate 3.0 Spring 2.01>添加过程:<1> 新建项目。
Package Explorer视图下,右键单击 New -> Web Project;<2> 添加Struts框架。
菜单栏MyEclipse -> Capabilities,或者右键单击新建的项目名,选择快捷菜单中的"MyEclipse"下的二级菜单;设置相关的包名后,请写一个Struts的小例子,用来测试Struts是否可用;<3> 添加Spring。
搭建SSH框架(Struts1,Spring2.5,Hibernate3)
搭建SSH框架:Struts1.* + Spring2.5 + Hibernate3.0 一,项目结构:图(1)Jsp页面省略,主要是一些添删改查的页面;二,开始搭建项目环境,步骤如下:使用平台:MyEclipse6.0/6.5框架版本:Struts1.* + Spring2.5 + Hibernate3.0;1,添加过程:1>,新建项目: 打开MyEclipse,在Package Explorer视图下,右键单击New-> Web Project;注意:在新建项目时,JDK的版本最好要选择Java EE 5.0;因为版本过低,可能有些JSP方面的功能不支持;新建玩项目之后,把该导的包导入到下面,下图为SS H 框架所需要的Jar包,注意,该项目用的是ORACLE数据库;其中,activation与mail这两个包为Java发邮件的包;classes12为Oracle数据库的驱动包,如果不是Oracle数据库,可更换该Jar包;dwe为Ajax dwr 框架中的包;2>,接着就开始用MyEclipse辅助开发Struts,Spring,Hibernate了;3>,首先MyEclipse辅助开发Struts,方法:右键单击你所建的项目,出现一级菜单,选择Myeclipse,选择Myeclipse之后会出现二级菜单,接着选择Add Struts Capabilities;;接着具体操作如下面图示:点击Finish按钮完成;完成之后,可将包删除;在上图中,如果那个勾没有去掉的话,就会自动生产如下标签:当然,如果你觉得标签对你没什么用的话,可以删除;如果该勾去掉的话,就只生成标签,这是Struts的核心标签;4>,MyEclipse辅助开发Spring,方法跟上面的一样,选择Add Spring apabilities;;接着具体操作如下面图示:然后点击Next,具体操作如下图:接着点击 Finish按钮,完成此项操作;5>,,最后MyEclipse辅助开发Hibernate,在执行和上面类似方法之前,Hibernate 需要先做另外一件事情,那就是和数据建立连接,具体操作如下图:点击上图位置的或者右边的>> ,然后再选择MyEclipse Database Explorer切换到如下图页面:,然后右键单击,新建一个Database Driver;如下图:下面这个截图是该项目的数据库链接图:如图所示,测试数据库链接成功;然后可直接点击Finish完成;接着切换到窗口,按照上面第三小步的方法,选择Add Hibernate apabilities;;接着具体操作如下面图示:点击下一步:点击下一步:点击下一步:点击下一步:点击 Finish 完成;6>,最后一步,就是运用Hibernate的映射机制,把数据库的表与JAVA的对形成一个关系映射;在此之前,首先应该在项目SRC的目录下面新建一个包,如该项目所示,用来存放映射生成的POJO对象以及映射文件;如下图:有一点说一下,你生成的*.hbm.xml文件可能不止一个,对,你可以把它们整合到一个文件中;然后新建按第五小步的方法,把窗口切换到MyEclipse Database Explorer界面,然后打开右键刚才所建立的链接,选择属于你自己的用户;然后选择Tble;右键选择如上图的属性:接下来的操作如下图:点击 Next,进入下一步:点击 Next,进入下一步:至此,项目环境己经搭建完成;三,项目搭建完成,SSH各个部分配置文件的说明,以及它们之间存在的关系:1,首先是Struts的核心配置文件,即struts-config.xml:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN""/dtds/struts-config_1_2.dtd"><struts-config><data-sources /><form-beans><!—建立Form表单,在此处进行登记 -→<form-bean name="userForm"type="erForm" /> </form-beans><global-exceptions /><global-forwards /><!—各个Action对应与之相对应的表单 -→<action-mappings><!-- 用户管理 --><action parameter="opers" attribute="userForm" name="userForm"path="/doUser" scope="request"><forward name="login_ok" path="/welcome.jsp"></forward><forward name="login_no" path="/index.jsp"></forward> </action></action-mappings><controllerprocessorClass="org.springframework.web.struts.DelegatingRequestProc essor"></controller><message-resourcesparameter="ermanagerview.struts.ApplicationResources"> </message-resources><!—Spring辅助Struts管理Struts-→<plug-inclassName="org.springframework.web.struts.ContextLoaderPlugIn"><set-property property="contextConfigLocation"value="/WEB-INF/action-servlet.xml" /></plug-in></struts-config>2,其次就是Springd的applicationContext.xml文件和action-servlet.xml文件:applicationContext.xml文件:<?xml version="1.0" encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.5.xsd"><!-- Session 工厂 --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation"value="classpath:hibernate.cfg.xml"><!-- 可以不要配置文件(hibernate.cfg.xml),直接写在这个Spring的配置文件中 --></property></bean><!-- 模板 --><bean id="hibernateTemplate"class="org.springframework.orm.hibernate3.HibernateTemplate"><property name="sessionFactory" ref="sessionFactory" /> </bean><!-- 事务器 --><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManage r"><property name="sessionFactory" ref="sessionFactory" /> </bean><!-- 对外代理 --><!-- 1,用户管理 --><bean id="userDaoImp"class="erDaoImp"><property name="hibernateTemplate" ref="hibernateTemplate" /> </bean><bean id="userServiceTarget"class="erServiceImp"> <property name="userdao"><ref local="userDaoImp" /></property></bean><bean id="userService"class="org.springframework.transaction.interceptor.TransactionProxyF actoryBean"><property name="transactionManager"><ref local="transactionManager" /></property><property name="target"><ref local="userServiceTarget" /></property><property name="transactionAttributes"><props><prop key="*">PROPAGATION_REQUIRED</prop></props></property></bean></beans>action-servlet.xml文件:<!—Spring辅助Struts管理Struts-<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.0.xsd"> <bean name="/doUser"class="erAction"scope="prototype"></bean></beans>3,最后就是Hibernate的hibernate.cfg..xml文件:<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration><session-factory><property name="ername">wangxiaodong</property><property name="connection.url">jdbc:oracle:thin:@192.168.0.2:1521:ALIZEEDB</property><property name="dialect">org.hibernate.dialect.Oracle9Dialect</property><propertyname="myeclipse.connection.profile">Test</property><property name="connection.password">donny</property><property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><mappingresource="com/ygkq/usermanager/model/entity/User.hbm.xml" /></session-factory></hibernate-configuration>该文件基本上不用动,都是自动生成的代码;当然,你也可以根据自己的需要添加代码,例如,你想在执行HQL语句的时候让它显示SQL语句,可将<property name="hibernate.show_sql">true</property>插入代码中;另外在图(1)中还有两个配置文件没有提到,那就是log4j.properties 与mytag.tld;其中log4j.properties是配置日志信息的;而mytag.tld主一个自定义标签;四,SSH框架搭建完成:SSH框架基本搭建完成,如果有不对或者不妥之处,请随时指教!~E-mail:jerry8059@。
ssh框架实验报告
ssh框架实验报告《SSH框架实验报告》SSH框架是指Struts2 + Spring + Hibernate的整合框架,它将三大框架有机地结合在一起,为Java开发人员提供了一种高效、稳定的开发方式。
在本实验中,我们对SSH框架进行了深入的研究和实验,以期能够更好地理解和掌握这一框架的使用方法和特点。
在实验中,我们首先进行了环境搭建,包括安装和配置Struts2、Spring和Hibernate框架,以及建立数据库连接等。
接着,我们创建了一个简单的Web应用程序,包括前端页面和后端业务逻辑,以便于对SSH框架进行测试和验证。
在这个过程中,我们深入了解了SSH框架的各个组成部分,包括Struts2的MVC模式、Spring的依赖注入和AOP特性,以及Hibernate的ORM映射和持久化操作。
通过实验,我们发现SSH框架具有以下几个特点:1. 结构清晰:SSH框架将前端页面、业务逻辑和数据持久化分离,使得应用程序的结构更加清晰和模块化,方便于开发和维护。
2. 灵活性强:由于整合了Struts2、Spring和Hibernate三大框架,SSH框架具有很强的灵活性,可以根据实际需求进行定制和扩展。
3. 性能优秀:通过对SSH框架进行性能测试,我们发现其在处理大规模数据和高并发访问时表现优秀,能够保持稳定的性能和响应速度。
4. 社区支持:由于SSH框架是目前Java开发领域最流行的整合框架之一,拥有庞大的用户群体和活跃的社区支持,能够及时获取到最新的技术资讯和解决方案。
总的来说,SSH框架是一种非常成熟和稳定的Java开发框架,具有广泛的应用前景和市场需求。
通过本次实验,我们对SSH框架有了更深入的了解和体验,相信在今后的开发工作中能够更加熟练地运用这一框架,为企业应用程序的开发和维护提供更好的技术支持。
ssh框架 实验报告
ssh框架实验报告《SSH框架实验报告》一、实验目的本实验旨在通过对SSH框架的学习和实践,掌握SSH框架的基本原理和应用技巧,提高对SSH框架的理解和运用能力。
二、实验内容1. 理解SSH框架的概念和组成结构2. 搭建SSH框架的开发环境3. 编写基本的SSH框架应用程序4. 调试和测试SSH框架应用程序5. 总结和分析实验结果三、实验步骤1. 理解SSH框架的概念和组成结构通过阅读相关文献和资料,了解SSH框架的基本概念和组成结构,包括Struts、Spring和Hibernate三大框架的作用和相互关系。
2. 搭建SSH框架的开发环境在本地计算机上安装并配置好Java开发环境、Tomcat服务器、MySQL数据库,并下载安装好Struts、Spring和Hibernate框架的相关文件和插件。
3. 编写基本的SSH框架应用程序创建一个简单的SSH框架应用程序,包括前端页面的设计和开发、后端业务逻辑的编写和数据库的操作等内容。
4. 调试和测试SSH框架应用程序对编写好的SSH框架应用程序进行调试和测试,确保程序能够正常运行并达到预期的效果。
5. 总结和分析实验结果总结本次实验的收获和体会,分析在实践中遇到的问题和解决方法,以及对SSH框架的进一步学习和应用展望。
四、实验结果通过本次实验,我对SSH框架有了更深入的理解,掌握了搭建SSH框架的基本步骤和技巧,同时也发现了一些问题和需要改进的地方。
在实践中,我对SSH 框架的应用有了更清晰的认识,对于将来的开发工作也更有信心。
五、结论SSH框架是一种非常强大和灵活的开发框架,通过本次实验的学习和实践,我对SSH框架有了更深入的理解和掌握,相信在将来的工作中能够更好地应用和发挥其优势,提高开发效率和质量。
六、参考文献1. 《SSH框架入门与实战》2. 《Spring实战》3. 《Hibernate实战》4. 《Struts2权威指南》以上就是本次实验的实验报告,希望能够对大家对SSH框架的学习和应用有所帮助。
idea搭建ssh框架的超详细教程
idea搭建ssh框架的超详细教程⽬录⼀。
创建项⽬1.new->project出现如下2.构建⽬录结构⼆。
Struts21.⾸先引⼊struts2依赖2.WEB-INF下web.xml⽂件配置3.在resources下添加struts.xml⽂件4.在action包下创建TestAction类,为了测试在webapp下新建了test.jsp页⾯5.部署6.启动测试三。
Spring1.⾸先引⼊spring相关依赖2.在web.xml中添加listener,并在resources下新建spring,xml⽂件四。
Hibernate1.引⼊hibernate依赖2.View--》Toolwindows---->Database3.编写代码⼀。
创建项⽬先附上测试的数据库DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` int(5) NOT NULL AUTO_INCREMENT,`name` varchar(10) COLLATE utf8_bin DEFAULT NULL,`password` varchar(10) COLLATE utf8_bin DEFAULT NULL,`remark` varchar(50) COLLATE utf8_bin DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES ('1', 'zhangsan', '123456', null);INSERT INTO `user` VALUES ('2', 'lisi', '123', null);INSERT INTO `user` VALUES ('3', 'wangan', '456', null);INSERT INTO `user` VALUES ('4', 'xinxi', '000', null);1.new->project出现如下点击next后出现如下填写GroupId和ArtifactId在点击next直⾄finish2.构建⽬录结构在main下新建java和resources⽬录如下并将java⽬录标记为Sources Root,resources标记为Resources Root在java下新建如下包package⼆。
SSH框架面试题(自己+别人的试题)
(问答题+选择题(在55页))Java工程师(程序员)面题Struts,Spring,Hibernate三大框架1.Hibernate工作原理及为什么要用?原理:1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Session 4.创建事务Transation 5.持久化操作6.提交事务7.关闭Session 8.关闭SesstionFactory为什么要用:1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。
他很大程度的简化DAO层的编码工作3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4. hibernate的性能非常好,因为它是个轻量级框架。
映射的灵活性很出色。
它支持各种关系数据库,从一对一到多对多的各种复杂关系。
2.Hibernate是如何延迟加载?1. Hibernate2延迟加载实现:a)实体对象b)集合(Collection)2. Hibernate3 提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。
3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都是对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many4.Struts1流程:1、客户端浏览器发出HTTP请求。
2、根据web.xml配置,该请求被ActionServlet接收。
3、根据struts-config.xml配置,ActionServlet先将请求中的参数填充到ActionForm中,然后ActionServlet再将请求发送到Action 进行处理。
ssh框架原理及流程
ssh框架原理及流程SSH框架原理及流程。
SSH框架是指Struts、Spring、Hibernate三大开源框架的整合,它们分别解决了Web层、业务逻辑层和数据访问层的开发问题。
SSH框架的整合,旨在充分发挥各自框架的优势,实现高效、灵活、可维护的Web应用程序开发。
在本文中,我们将深入探讨SSH框架的原理及流程。
首先,我们来了解一下SSH框架各个组成部分的原理。
Struts作为Web层框架,它采用MVC(Model-View-Controller)设计模式,将应用程序分为模型、视图和控制器三层,实现了数据、展示和控制的分离,提高了代码的复用性和可维护性。
Spring作为业务逻辑层框架,它提供了IoC(控制反转)和AOP(面向切面编程)等功能,通过IoC容器管理对象之间的依赖关系,实现了松耦合,降低了组件之间的耦合度。
Hibernate作为数据访问层框架,它提供了ORM(对象关系映射)功能,将Java对象和数据库表之间建立映射关系,实现了面向对象的数据访问,简化了数据库操作。
接下来,我们来了解SSH框架的整合流程。
首先,我们需要在项目中引入Struts、Spring、Hibernate的相关jar包,并配置它们的配置文件。
在web.xml中配置DispatcherServlet,用于拦截所有的请求,然后将请求分发给对应的Controller处理。
在Spring的配置文件中配置业务逻辑层和数据访问层的Bean,以及事务管理器等。
在Hibernate的配置文件中配置数据源、SessionFactory等。
然后,我们需要编写业务逻辑层和数据访问层的代码,并在Controller中调用业务逻辑层的方法,最终将数据返回给视图层进行展示。
在SSH框架中,我们可以充分利用Struts的表单验证、Spring的事务管理、Hibernate的持久化操作等功能,实现了Web应用程序的快速开发。
同时,SSH框架也提供了良好的扩展性,我们可以根据项目的需要,灵活地替换其中的某个框架,而不影响整体架构。
javawebssh框架实例
javawebssh框架实例javawebssh框架实例是一种用于实现Java与WebSSH的框架。
WebSSH是一种基于Web的SSH(Secure Shell)客户端,可以通过浏览器远程登录到服务器并执行命令。
在本文中,我们将介绍如何使用javawebssh框架来实现WebSSH 功能。
我们需要在项目中引入javawebssh框架的依赖。
可以通过Maven 或Gradle等构建工具来管理依赖。
在pom.xml文件中添加以下依赖:```xml<dependency><groupId>com.hierynomus</groupId><artifactId>sshj</artifactId><version>0.29.0</version></dependency><dependency><groupId>com.hierynomus</groupId><artifactId>sshj-gateway</artifactId><version>0.29.0</version></dependency><dependency><groupId>org.apache.sshd</groupId><artifactId>sshd-core</artifactId><version>2.7.0</version></dependency><dependency><groupId>org.eclipse.jetty.websocket</groupId><artifactId>websocket-server</artifactId><version>9.4.31.v20200723</version></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-server</artifactId><version>9.4.31.v20200723</version></dependency>```接下来,我们需要创建一个WebSSHController类来处理WebSSH的请求。
项目中需要用到spring 的地方
对结果列表进行加工:不论通过jdbc还是hibernate方式,如果需要对find方法取得的列表中的对象进行加工,显然使用回调模式进行效率更高。实际上如果使用HibernateTemplate并且希望查询出的结果不是对象列表而是数组列表,那么也可以使用回调,如下:
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
另外在实际项目中有一个发现,在websphere6.0的容器下部署的web应用,使用websphere自带的数据库连接池,当spring事务配置为readOnly,在数据量比较大,并且有一定并发量时会导致websphere连接池抛出异常,并导致性能严重下降。去掉readOnly选项就恢复正常了,这种情况不容易在测试环境重现,因此只能去掉readOnly选项,发现去掉以后性能也没有太多的下降。
service端的框架支持:在serivce层通过ioc进行bean的管理配置,同时进行事务控制的定义。
aop:利用拦截器配置管理特性
jndi:利用spring的context组件对jndi进行定义,通常用于数据库连接池的配置和查找
其他:spring1.2版本的mvc组件是针对web端的应用框架,尽管理念非常oop,不过实际使用的时候确实不如struts2好使,spring 2.0以后的mvc据说有很大改进,以后有机会再用吧。另外spring的定时任务(job)也经常用到,后边会有提及。
SSH协议的实际应用场景
SSH协议的实际应用场景SSH(Secure Shell)是一种通过网络进行加密传输的协议,可以在不安全的网络中提供安全的远程登录和执行命令。
它的应用场景非常广泛,下面将介绍一些SSH协议的实际应用场景。
1. 远程登录和管理服务器SSH最常见的应用场景之一是远程登录和管理服务器。
通过使用SSH协议,系统管理员可以安全地远程访问服务器,执行命令、查看日志等。
相比于传统的telnet等协议,SSH通过加密传输数据,有效地保护了敏感的登录信息和数据。
2. 文件传输SSH协议还支持安全的文件传输。
系统管理员可以使用SCP (Secure Copy)命令或者SFTP(SSH File Transfer Protocol)协议来上传或下载文件,不仅保证了文件的安全性,而且提供了方便的操作界面。
这在跨平台的文件传输、备份和同步中非常有用。
3. 隧道技术SSH还可以用于创建安全的隧道,将不安全的网络转换为安全的网络。
例如,使用SSH隧道可以通过公共网络安全地访问内部网络中的服务,如数据库、Web服务器等。
这种方式避免了直接将内部服务暴露在公网上,提高了系统的安全性。
4. 远程维护和故障排除当远程服务器发生故障或需要维护时,SSH协议可以派上用场。
管理员可以通过SSH协议远程登录服务器,查看日志、修改配置文件和执行诊断命令,快速定位和解决问题。
SSH协议的安全性和可靠性使其成为远程故障排除的首选工具。
5. Git和版本控制许多代码托管平台使用SSH协议来进行代码的安全传输和版本控制。
开发者可以使用SSH密钥来认证自己的身份,并通过SSH协议与代码仓库进行交互。
这在多人协作开发中非常有用,不仅保证了代码的安全性,还提供了便捷的版本管理功能。
6. 基于SSH协议的安全访问控制基于SSH协议的安全访问控制可以帮助管理员更好地管理用户权限,限制用户在服务器上的操作。
通过SSH协议,管理员可以为每个用户绑定特定的权限,控制其能够执行的命令和访问的资源。
详解ssh框架原理及流程
详解ssh框架原理及流程什么是SSHSSH是 struts+spring+hibernate的⼀个集成框架,是⽬前较流⾏的⼀种web应⽤程序开源框架。
SSH不是⼀个框架,⽽是把多个框架(Struts、Spring以及Hibernate)紧密的结合在⼀起,⽤于构建灵活、易于扩展的多层Web应⽤程序。
SSH框架的系统从职责上分为四层:表⽰层、业务逻辑层、数据持久层和域模块层(实体层)。
SSH(Struts2+Spring+Hibernate)框架的项⽬,该架构主要分为三个层次:(1)Struts2:负责web层(2)Spring:业务层的管理(3)Hibernate:负责数据持久化Struts2⼯作原理:1.初始化⼀个指向servlet容器的请求。
2.请求经过web.xml中配置的过滤器过滤,FilterDispatcher(struts2控制器的核⼼)询问ActionMapper是否需要调⽤某个Action来处理这个请求。
如果ActionMapper决定需要调⽤某个Action,FilterDispatcher则把请求的处理交给ActionProxy。
3.ActionProxy通过配置⽂件Struts.xml配置⽂件找到需要调⽤的Action类。
4.ActionProxy创建⼀个ActionInvocation实例,同时ActionInvocation通过代理模式调⽤Action。
但在调⽤之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。
5.Action执⾏完毕后,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。
即开发⼈员通过发送http请求,这个请求经过web.xml的过滤器过滤看看是否要调⽤某个action,如果有则在Struts.xml找到该请求的实现的⽅法,然后返回运⾏的结果。
Hibernate⼯作原理:1. 读取并解析配置⽂件2.读取并解析映射信息,创建SessionFactory3. 打开Sesssion4.创建事务Transation5. 持久化操作6.提交事务7.关闭Session8. 关闭SesstionFactory即通过spring管理的Hibernate初始化时加载了xxx.hbm.xml然后读取解析映射信息,创建了SessionFactory。
SSH整合过程(struts-2.3.15.1+spring-3.2.4+hibernate-4.2.3)
SSH整合SSH整合前应该先熟悉各个框架的单独使用,至少要了解各自的xml配置。
环境:struts-2.3.15.1,spring-3.2.4,hibernate-4.2.3,myeclipse10,JDK-1.6,Mysql Jar包:1.新建web项目2.以简单的登录验证为例3.建立login.jsp,login_success.jsp,login_error.jsp4.引入struts2(1)web.xml配置<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepa reAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>(2)src下的struts.xml配置<package name="default"namespace="/"extends="struts-default"><action name="login"class="com.accp.action.LoginAction" method="login"><result name="success"> /login_success.jsp </result><result name="error"> /login_error.jsp </result></action></package>(3)测试struts2是否能够通过5.引入spring(1)配置web.xml,添加listener<listener><listener-class>org.springframework.web.context.ContextLoaderListener </listener-class></listener><!-- 告知spring config location 的存储位置 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:beans.xml</param-value></context-param>(2)配置src下的beans.xml将spring的ApplicationContext.xml拷贝至src下,删除里面的配置项,只保留下面内容<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd"></beans>6.引入hibernate(1)配置beans.xml<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:jee="/schema/jee"xmlns:tx="/schema/tx"xmlns:aop="/schema/aop"xmlns:p="/schema/p"xmlns:util="/schema/util"xmlns:tool="/schema/tool" xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd /schema/tx/schema/tx/spring-tx.xsd/schema/aop/schema/aop/spring-aop.xsd/schema/jee/schema/jee/spring-jee.xsd/schema/context/schema/context/spring-context.xsd/schema/util/schema/util/spring-util.xsd/schema/tool/schema/tool/spring-tool.xsd"default-lazy-init="true"default-autowire="byName"><!--spring jdbc配置数据源 Mysql--><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"value="com.mysql.jdbc.Driver" /><property name="url"value="jdbc:mysql://localhost:3306/test" /><property name="username"value="user"/><property name="password"value="123456"/></bean><!-- hibernate.cfg.xml Spring config --><bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><!-- connection --><property name="dataSource"><ref local="dataSource"/></property><!-- hibernate自身属性 --><property name="hibernateProperties"><props><prop key="hibernate.show_sql">true</prop><prop key="hibernate.format_sql">true</prop><propkey="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <propkey="hibernate.current_session_context_class">thread</prop></props></property><!-- 映射文件<property name="mappingResources"><list><value>com/forwor/ssh/entity/xml/User.hbm.xml</value></list></property>--></bean><!-- 注入 --><bean id="userDao"class="erDaoImpl"> <property name="sessionFactory"><ref local="sessionFactory"/></property></bean><!-- aop --><!-- transaction --><bean id="userManager"class="erManagerImpl"><property name="userDao"><ref local="userDao"/></property></bean><!-- advice --><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager "><property name="sessionFactory"><ref local="sessionFactory"/></property></bean><!-- 事务处理 --><bean id="transactionInterceptor"class="org.springframework.transaction.interceptor.TransactionInterce ptor"><property name="transactionManager"><ref local="transactionManager"/></property><property name="transactionAttributes"><props><prop key="register">PROPAGATION_REQUIRED</prop><!--hibernate4必须配置为开启事务否则 getCurrentSession()获取不到--><prop key="get*">PROPAGATION_REQUIRED,readOnly</prop><prop key="find*">PROPAGATION_REQUIRED,readOnly</prop><prop key="select*">PROPAGATION_REQUIRED,readOnly</prop><prop key="query*">PROPAGATION_REQUIRED,readOnly</prop><prop key="sync*">PROPAGATION_REQUIRED</prop><prop key="finish*">PROPAGATION_REQUIRED</prop><prop key="add*">PROPAGATION_REQUIRED</prop><prop key="insert*">PROPAGATION_REQUIRED</prop><prop key="edit*">PROPAGATION_REQUIRED</prop><prop key="update*">PROPAGATION_REQUIRED</prop><prop key="save*">PROPAGATION_REQUIRED</prop><prop key="remove*">PROPAGATION_REQUIRED</prop><prop key="delete*">PROPAGATION_REQUIRED</prop><prop key="login*">PROPAGATION_REQUIRED</prop><propkey="*">PROPAGATION_REQUIRED,ng.Exception</prop></props></property></bean><!-- autoproxy 自动创建代理--><bean id="ProxyCreator"class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyC reator"><property name="beanNames"><list><value>*Manager</value></list></property><property name="interceptorNames"><list><value>transactionInterceptor</value></list></property></bean><bean id="loginAction"class="com.accp.action.LoginAction"scope="prototype"><property name="userManager"><ref local="userManager"/></property></bean></beans>7.类图以用户登录验证为基础的测试流程控制8.注意事项(1)login.jsp 输入内容的name为ername user.password时,LoginAction中应该为user生成相应的get/set方法。
ssh框架期末考试题及答案
ssh框架期末考试题及答案一、选择题(每题2分,共20分)1. SSH框架中,S代表的是:A. SpringB. StrutsC. HibernateD. SpringMVC答案:A2. 在Struts2框架中,OGNL表达式中获取参数值的正确方式是:A. ${param.paramName}B. ${paramName}C. ${request.paramName}D. ${session.paramName}答案:A3. Hibernate中,以下哪个接口用于获取当前会话的持久化对象?A. SessionB. TransactionC. QueryD. Criteria答案:A4. Spring框架中,以下哪个注解用于声明一个Bean?A. @AutowiredB. @ServiceC. @ComponentD. @Repository答案:C5. 在Spring MVC中,以下哪个注解用于映射请求到对应的处理器方法?A. @ControllerB. @RequestMappingC. @ResponseBodyD. @PathVariable答案:B6. Struts2中,以下哪个标签用于遍历集合?A. <s:iterator>B. <s:property>C. <s:if>D. <s:else>答案:A7. Hibernate中,以下哪个是事务管理的接口?A. SessionB. TransactionC. QueryD. Criteria答案:B8. Spring框架中,以下哪个注解用于自动注入集合类型的Bean?A. @AutowiredB. @QualifierC. @ResourceD. @Inject答案:A9. 在Struts2框架中,以下哪个拦截器用于处理表单验证?A. TimerInterceptorB. PrepareInterceptorC. ValidationInterceptorD. WorkflowInterceptor答案:C10. Spring MVC中,以下哪个注解用于将请求参数绑定到控制器方法的参数上?A. @RequestParamB. @PathVariableC. @RequestBodyD. @RequestHeader答案:A二、简答题(每题5分,共20分)1. 简述SSH框架的组成及其各自的作用。
spring自带的定时任务功能@EnableScheduling
spring⾃带的定时任务功能@EnableScheduling1 demopackage com.test.domi.config;import org.springframework.beans.factory.annotation.Configurable;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.scheduling.annotation.Scheduled;import ponent;import java.text.SimpleDateFormat;import java.util.Date;@Component@Configurable@EnableSchedulingpublic class ScheduledTasks {//每30秒执⾏⼀次@Scheduled(fixedRate = 1000 * 30)public void reportCurrentTime(){System.out.println ("Scheduling Tasks Examples: The time is now " + dateFormat ().format (new Date ()));}//在固定时间执⾏@Scheduled(cron = "0 */1 * * * * ")public void reportCurrentByCron(){System.out.println ("Scheduling Tasks Examples By Cron: The time is now " + dateFormat ().format (new Date()));}private SimpleDateFormat dateFormat(){return new SimpleDateFormat ("HH:mm:ss");}}Scheduling Tasks Examples: The time is now 11:55:54Scheduling Tasks Examples By Cron: The time is now 11:56:00Scheduling Tasks Examples: The time is now 11:56:24Scheduling Tasks Examples: The time is now 11:56:54Scheduling Tasks Examples By Cron: The time is now 11:57:002 详解1.cron是设置定时执⾏的表达式,如 0 0/5 * * * ?每隔五分钟执⾏⼀次2.zone表⽰执⾏时间的时区3.fixedDelay 和fixedDelayString ⼀个固定延迟时间执⾏,上个任务完成后,延迟多久执⾏4.fixedRate 和fixedRateString⼀个固定频率执⾏,上个任务开始后多长时间后开始执⾏5.initialDelay 和initialDelayString表⽰⼀个初始延迟时间,第⼀次被调⽤前延迟的时间3 总结常见问题a: 单线程任务丢失,转为异步线程池默认的 ConcurrentTaskScheduler 计划执⾏器采⽤Executors.newSingleThreadScheduledExecutor() 实现单线程的执⾏器。
IntelliJ_IDEA中建立SSH应用步骤
public interface IUserDAO { public List search(UsersEntity condition);
}
UserDAO.java
package com.dao;
import ersEntity; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.criterion.Example;
7. 接下来,我们打开 web.xml,增加如下配置,让 Web 应用程序启东市自动装载 Spring 容 器,如下所示。
如果没有在 Project 中手工添加 spring-web-x.x.x.RELEASE.jar,那么一开始会报告找不到 org.springframework.web.context.ContextLoaderListener 错误,这个接口存在于 springweb-x.x.x.RELEASE.jar 包中,需要手工添加到系统,方法如下,打开 Project Structure, 选中左侧的 Libraries,再选中+按钮,选择 From Maven,出现了 Maven 查找对话框,输 入 spring-web 进行搜索,在提示的搜索结果中找到合适的版本去下载,下载的文件很 多,可以删除掉其他的,只保留 spring-web-x.x.x.RELEASE.jar
UsersEntity that = (UsersEntity) o;
if (id != that.id) return false; if (account != null ? !account.equals(that.account) : that.account != null) return false; if (name != null ? !name.equals() : != null) return false; if (password != null ? !password.equals(that.password) : that.password != null) return false;
SpringBoot中并发定时任务的实现、动态定时任务的实现(看这一篇就够了)
SpringBoot中并发定时任务的实现、动态定时任务的实现(看这⼀篇就够了)原创不易,如需转载,请注明出处,否则将追究法律责任!!!⼀、在JAVA开发领域,⽬前可以通过以下⼏种⽅式进⾏定时任务1、单机部署模式Timer:jdk中⾃带的⼀个定时调度类,可以简单的实现按某⼀频度进⾏任务执⾏。
提供的功能⽐较单⼀,⽆法实现复杂的调度任务。
ScheduledExecutorService:也是jdk⾃带的⼀个基于线程池设计的定时任务类。
其每个调度任务都会分配到线程池中的⼀个线程执⾏,所以其任务是并发执⾏的,互不影响。
Spring Task:Spring提供的⼀个任务调度⼯具,⽀持注解和配置⽂件形式,⽀持Cron表达式,使⽤简单但功能强⼤。
Quartz:⼀款功能强⼤的任务调度器,可以实现较为复杂的调度功能,如每⽉⼀号执⾏、每天凌晨执⾏、每周五执⾏等等,还⽀持分布式调度,就是配置稍显复杂。
2、分布式集群模式(不多介绍,简单提⼀下)问题:I、如何解决定时任务的多次执⾏?II、如何解决任务的单点问题,实现任务的故障转移?问题I的简单思考:1、固定执⾏定时任务的机器(可以有效避免多次执⾏的情况,缺点就是单点故障问题)。
2、借助Redis的过期机制和分布式锁。
3、借助mysql的锁机制等。
成熟的解决⽅案:1、Quartz:可以去看看这篇⽂章[Quartz分布式]( https:///jiafuwei/p/6145280.html)。
2、elastic-job:(https:///elasticjob/elastic-job-lite)当当开发的弹性分布式任务调度系统,采⽤zookeeper实现分布式协调,实现任务⾼可⽤以及分⽚。
3、xxl-job:(https:///xuxueli/xxl-job)是⼤众点评员发布的分布式任务调度平台,是⼀个轻量级分布式任务调度框架。
4、saturn:(https:///vipshop/Saturn) 是唯品会提供⼀个分布式、容错和⾼可⽤的作业调度服务框架。
SSH三大框架的工作原理及流程
SSH三⼤框架的⼯作原理及流程摘要: Hibernate⼯作原理及为什么要⽤? 原理: 1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置⽂件 2.由hibernate.cfg.xml中的读取并解析映射信息 3.通过config.buildSessionFactory();//创建SessionFactory 4.sessionFactoryHibernate⼯作原理及为什么要⽤?原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置⽂件2.由hibernate.cfg.xml中的读取并解析映射信息3.通过config.buildSessionFactory();//创建SessionFactory4.sessionFactory.openSession();//打开Sesssion5.session.beginTransaction();//创建事务Transation6.persistent operate持久化操作7.session.getTransaction().commit();//提交事务8.关闭Session9.关闭SesstionFactory为什么要⽤:1. 对JDBC访问数据库的代码做了封装,⼤⼤简化了数据访问层繁琐的重复性代码。
1. Hibernate是⼀个基于JDBC的主流持久化框架,是⼀个优秀的ORM实现。
他很⼤程度的简化DAO层的编码⼯作2. hibernate使⽤Java反射机制,⽽不是字节码增强程序来实现透明性。
3. hibernate的性能⾮常好,因为它是个轻量级框架。
映射的灵活性很出⾊。
它⽀持各种关系数据库,从⼀对⼀到多对多的各种复杂关系。
2. Hibernate是如何延迟加载?1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)1. Hibernate3 提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从⽽提⾼了服务器的性能。
产品方案技术白皮书模板2(含系统架构说明书)
附件二十九:产品方案技术白皮书一、背景概述 (2)1、研发背景 (2)2、产品定位 (2)二、产品方案功能介绍 (2)1、设计理念 (2)2、系统拓扑图 (2)3、系统构架描述 (2)4、系统功能介绍 (2)5、产品方案规格 (2)四、产品方案应用介绍 (3)1、应用模式 (3)2、应用流程 (3)3、应用环境 (3)五、产品方案特性介绍 (3)1、技术特性 (3)2、应用特性 (3)3、系统特性 (3)六、产品方案技术介绍 (3)1、相关技术 (3)2、技术指标 (4)七、产品方案测评数据 (4)八、实施运维方式说明 (4)九、售后服务方式说明 (4)一、背景概述1、研发背景介绍用户需求背景、该产品所在行业信息化建设背景、产品所涉及的相关政策简述等,以说明该产品的研发背景,以及满足的客户需求。
2、产品定位为了满足客户以上需求,该产品具有什么功能,能够解决什么问题。
二、产品方案功能介绍1、设计理念该产品方案的设计思路。
2、系统拓扑图使用统一的图标,制作系统拓扑图。
3、系统构架描述按照系统的构成,分类对系统进行描述。
4、系统功能介绍详细阐述系统的主要功能。
5、产品方案规格产品方案不同的规格介绍,或者对产品方案技术规格的介绍。
四、产品方案应用介绍1、应用模式该产品方案包括的应用模式类型,或者针对不同类型客户的解决方案。
2、应用流程该产品方案的应用流程。
3、应用环境描述该产品所运行的应用环境。
五、产品方案特性介绍1、技术特性主要是性能先进性、功能齐全性、系统兼容性、技术稳定性等。
2、应用特性主要是部署灵活性、可扩展性、管理方便性、易用性等。
3、系统特性对系统的主要特性进行描述,根据产品不同和竞争优势的不同而不同。
六、产品方案技术介绍1、相关技术主要应用技术的介绍,以及该技术的优势。
2、技术指标针对技术参数进行描述。
七、产品方案测评数据产品方案主要测评数据,可以是内部测评数据,也可以是第三方的测评数据。
SSH框架运行流程
SSH框架运行流程1.初始化阶段:在初始化阶段,SSH框架会加载配置文件、创建核心对象和建立组件之间的关联关系。
1.1加载配置文件:1.2创建核心对象:1.3建立组件关联:2.请求处理阶段:在请求处理阶段,SSH框架根据请求的URL找到相应的处理器,并将请求参数传递给处理器进行处理。
2.1客户端发送请求:客户端通过浏览器向服务器发送请求,请求的URL中包含了需要调用的方法和相应的参数。
2.2URL映射:2.3参数绑定:2.4方法调用:处理器会调用相应的方法,并将参数传递给方法进行处理。
2.5数据库操作:如果需要进行数据库操作,如增删改查等,处理器会通过Hibernate 框架进行数据库访问。
3.结果返回阶段:在结果返回阶段,SSH框架将处理结果返回给客户端,通常是通过页面展示或异步请求返回数据。
3.1视图解析:如果处理器返回的是页面,SSH框架会根据配置文件中定义的视图解析器,将逻辑视图转换为具体的物理视图。
3.2页面渲染:3.3异步请求返回数据:如果处理器返回的是异步请求的数据,SSH框架会将数据封装成JSON 或XML格式,并通过HTTP协议返回给客户端。
总结:SSH框架的运行流程可以概括为初始化、请求处理和结果返回三个阶段。
在初始化阶段,SSH框架会加载配置文件、创建核心对象和建立组件之间的关联关系;在请求处理阶段,SSH框架根据请求的URL找到相应的处理器,并将请求参数传递给处理器进行处理;在结果返回阶段,SSH框架将处理结果返回给客户端,通常是通过页面展示或异步请求返回数据。
这个流程使得开发者能够快速开发出高质量的Java Web应用程序。
java ssh 面试题
java ssh 面试题Java SSH面试题一、简介SSH(Spring+SpringMVC+Hibernate)是一种常用的Java Web开发框架,被广泛应用于企业级Web应用开发。
在面试中,面试官常常会提问与SSH框架相关的问题。
本文将介绍一些常见的Java SSH面试题及其答案,以帮助准备面试的Java开发人员更好地应对这些问题。
二、常见问题与解答1. 什么是SSH框架?答:SSH框架是由Spring、SpringMVC和Hibernate三个框架组合而成的一种Java Web开发框架。
Spring作为一个轻量级的IoC容器和AOP框架,负责管理Java对象的生命周期和实现面向切面编程。
SpringMVC作为一个基于MVC模式的Web框架,负责请求的分发和处理。
Hibernate作为一个ORM(Object-Relational Mapping)框架,负责将Java对象与数据库中的数据进行映射和交互。
2. SSH框架的优点是什么?答:SSH框架有以下几个优点:- 高度可配置:SSH框架提供了灵活的配置选项,可以根据具体需求进行定制。
- 松耦合:各个组件之间的耦合度较低,开发人员可以针对不同的组件进行独立开发和维护。
- 强大的功能支持:Spring、SpringMVC和Hibernate都是成熟且功能强大的框架,提供了丰富的特性和扩展性。
- 易于测试:SSH框架采用了依赖注入和面向接口编程等技术,使得代码更易于测试和调试。
- 与Java EE标准兼容:SSH框架可以与Java EE标准技术集成,如JSP、Servlet、JPA等。
3. Spring的核心功能是什么?答:Spring的核心功能包括:- IoC容器:负责管理和控制对象的生命周期,通过依赖注入(Dependency Injection)将对象之间的依赖关系交给容器管理。
- AOP框架:通过面向切面编程(Aspect-Oriented Programming),在不修改源代码的情况下,实现对目标对象的增强功能,如日志记录、事务处理等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Spring定时器在SSH框架中的应用---Spring调度任务本课题参考自《Spring in action》。
并非应用系统中发生的所有事情都是由用户的动作引起的。
有时候,系统自己也需要发起一些动作。
例如,集抄系统每天早上六点把抄表数据传送给营销系统。
我们有两种选择:或者是每天由用户手动出发任务,或者让应用系统中按照预定的计划自动执行任务。
在Spring中有两种流行配置:Java的Timer类和OpenSymphony的Quartz来执行调度任务。
下面以给商丘做的接口集抄900到中间库的日冻结数据传输为例:1. Java Timer调度器首先定义一个定时器任务,继承java.util.TimerTask类实现run方法import java.util.TimerTask;import xj.service.IJdbc1Service;import xj.service.IJdbc2Service;public class DayDataTimerTask extends TimerTask{private IJdbc2Service jdbc2Service=null;private IJdbc1Service jdbc1Service=null;public void run({SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss";System.out.println("日冻结转接任务开始时间:"+df.format(Calendar.getInstance(.getTime(;System.out.println("日冻结转接任务结束时间:"+df.format(Calendar.getInstance(.getTime(;}//通过set方法获取service服务,如果没有该方法,则为nullpublic void setJdbc2Service(IJdbc2Service jdbc2Service {this.jdbc2Service = jdbc2Service;}public void setJdbc1Service(IJdbc1Service jdbc1Service {this.jdbc1Service = jdbc1Service;}}Run(方法定义了当任务运行时该做什么。
jdbc1Service,jdbc2Service通过依赖注入的方式提供给DayDataTimerTask。
如果该任务中没有service服务的set方法,则取到的该service服务为null。
其次,在Spring配置文件中声明dayDataTimerTask:<bean id="dayDataTimerJob" class="xj.action.DayDataTimerTask"><property name="jdbc1Service"><ref bean="jdbc1Service"/>property><property name="jdbc2Service"><ref bean="jdbc2Service"/>property>bean>该声明将DayDataTimerTask放到应用上下文中,并在jdbc1Service、jdbc2Service属性中分别装配jdbc1Service、jdbc2Service。
在调度它之前,它不会做任何事情。
<bean id="scheduledDayDataTimerJob"class="org.springframework.scheduling.timer.ScheduledTimerTask"><property name="timerTask"><ref bean="dayDataTimerJob"/>property><property name="delay"><value>3000 value>property><property name="period"><value>864000000 value>property>bean>属性timerTask告诉ScheduledTimerTask运行哪个TimerTask。
再次,该属性装配了指向scheduledDayDataTimerJob的一个引用,它就是DayDataTimerTask。
属性period告诉ScheduledTimerTask以怎样的频度调用TimerTask的run(方法。
该属性以毫秒作为单位,它被设置为864000000,指定这个任务应该每24小时运行一次。
属性delay允许你指定当任务第一次运行之前应该等待多久。
在此指定DayDataTimerTask的第一次运行相对于应用程序的启动时间延迟3秒钟。
<bean class="org.springframework.scheduling.timer.TimerFactoryBean"><property name="scheduledTimerTasks"><list><ref bean="scheduledDayDataTimerJob"/>list>property>bean>Spring的TimerFactoryBean负责启动定时任务。
属性scheduledTimerTasks要求一个需要启动的定时器任务的列表。
在此只包含一个指向scheduledDayDataTimerJob的引用。
Java Timer只能指定任务执行的频度,但无法精确指定它何时运行,这是它的一个局限性。
要想精确指定任务的启动时间,就需要使用Quartz[kwɔ:ts]调度器。
2.Quartz调度器Quartz调度器不仅可以定义每隔多少毫秒执行一个工作,还允许你调度一个工作在某个特定的时间或日期执行。
首先创建一个工作,继承QuartzJobBean类实现executeInternal方法import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.springframework.dao.DataIntegrityViolationException;import org.springframework.scheduling.quartz.QuartzJobBean;import xj.service.IJdbc1Service;import xj.service.IJdbc2Service;public class DayDataQuartzTask extends QuartzJobBean{private IJdbc2Service jdbc2Service=null;private IJdbc1Service jdbc1Service=null;protected void executeInternal(JobExecutionContext context throws JobExecutionException{SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss";System.out.println("日冻结转接任务开始时间:"+df.format(Calendar.getInstance(.getTime(;System.out.println("日冻结转接任务结束时间:"+df.format(Calendar.getInstance(.getTime(;}//通过set方法获取service服务,如果没有该方法,则为nullpublic void setJdbc2Service(IJdbc2Service jdbc2Service {this.jdbc2Service = jdbc2Service;}public void setJdbc1Service(IJdbc1Service jdbc1Service {this.jdbc1Service = jdbc1Service;}}在Spring配置文件中按照以下方式声明这个工作:—声明工作--><bean id="dayDataJob" class="org.springframework.scheduling.quartz.JobDetailBean"><property name="jobClass"><value>xj.action.DayDataQuartzTask value>property><property name="jobDataAsMap"><map><entry key="jdbc1Service">entry><entry key="jdbc2Service"><ref bean="jdbc2Service"/>entry>map>property>bean>Quartz的org.quartz.Trigger类描述了何时及以怎样的频度运行一个Quartz工作。
Spring提供了两个触发器SimpleTriggerBean和CronTriggerBean。
SimpleTriggerBean与scheduledTimerTasks类似。
指定工作的执行频度,模仿scheduledTimerTasks配置。
<bean id="simpleDayDataJobTrigger"class="org.springframework.scheduling.quartz.SimpleTriggerBean"><property name="jobDetail"><ref bean="dayDataJob"/>property><property name="startDelay"><value>1000 value>property><property name="repeatInterval"><value>86400000 value>property>bean>—调度cron工作--><bean id="dayDataJobTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail">property><property name="cronExpression"><value>0 30 2 * * ? value>property>bean>一个cron表达式有6个或7个由空格分隔的时间元素。