前天的时候写了定时器监控网站的文章,当时理解的是找台机器放上去把main运行了就OK了,谁知领导说你做一个能挂服务器上的,到时候做个webservice接口,调用短信平台,如果网站无法登陆就直接发短信给用户。
于是就有了下面的东西:
先说jar包:spring.jar,quartz-all-1.8.5.jar,log4j-1.2.15.jar,axis.jar
先导包, 然后建立package创建类,我这里创建的类名为:QuartzJob,类中创建一个名为work的方法
之后再WEB-INF下简历一个xml文件,applicationContext_quartz.xml
具体内容为:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
<!-- 要调用的工作类 -->
<bean id="quartzJob" class="你的类的路径"></bean>
<!-- 定义调用对象和调用对象的方法 -->
<bean id="jobTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject">
<ref bean="quartzJob"/>
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<value>此定时器执行的类中的方法名</value>
</property>
</bean>
<!-- 定义触发时间 -->
<bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="jobTask"/>
</property>
<!-- cron表达式 -->
<property name="cronExpression">
<!-- 每隔10秒执行一次-->
<value>0/10 * * * * ?</value>
</property>
</bean>
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="doTime"/>
</list>
</property>
</bean>
</beans>
最后需要做的就是配置web.xml文件
具体内容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 加载spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext*.xml
</param-value>
</context-param>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
-----至此一个定时器就做好了,具体的方法体我就不写了。
下来来说webserice远程调用
package com.foresee.ws;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class WsUtil {
private WsUtil(){}
private static WsUtil instance = null;
public static WsUtil getInstance(){
if(instance==null){
instance = new WsUtil();
}
return instance;
}
static String URL = "http://具体暴露接口的URL?wsdl";//这里涉及公司隐私就不写了
public static String invokeWs(String sid, String xml){
String returnXml = null;
Service service = new Service();
Call call = null;
try {
call = (Call) service.createCall();
call.setTargetEndpointAddress(URL);
call.setTimeout(new Integer("400"));
call.setOperationName(new QName(URL,"invoke"));
returnXml = (String) call.invoke(new Object[]{sid, xml});
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return returnXml;
}
}
上面把这个类加工成了单例模式,因为是挂在定时服务上的,所以没必要每次都去实例化。
返回的是一个XML文件,因为webservice是用xml文件来进行数据交互的。如果有必要可以将xml文件中的内容解析出来,google上现成的解析代码是有的。
至此搞定了。
相关推荐
第二节 MCS-51系列单片机的中断系统: MCS-51系列单片机的中断系统由多个寄存器组成,如TCON、IE、IP等。TCON是中断控制寄存器,用于控制中断请求的标志和触发方式。IE是中断允许控制寄存器,用于控制中断的允许和...
如果先初始化从模式定时器3,定时器3工作在触发模式下,TRGI信号来源为定时器2的TRGO,而定时器2还未初始化,故TRGO信号来源默认是UG位,故在定时器2初始化过程中会置位UG位,从而触发定时器3的从模式触发模式,导致...
辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 ...
2. **窗口定时器(CTimer)** - CTimer类提供了更面向对象的定时器处理方式,不需要处理WM_TIMER消息。 - 创建CTimer对象时,可以指定一个时间间隔和一个成员函数作为回调,当定时器触发时,这个成员函数会被调用...
2. 设置主定时器的计数模式和预分频器,以决定计数的频率和范围。 3. 配置从定时器的同步模式,通常选择更新事件同步(TIM_SlaveConfig函数中的TIM_SlaveMode_Update)。 4. 启用定时器的中断和DMA请求,如果需要的...
2. **线程安全**:由于定时器操作可能与主线程或其他线程并发执行,因此必须确保所有共享数据访问都是线程安全的,通常通过同步原语(如CriticalSection或Mutex)来实现。 3. **事件驱动编程**:fzTThreadTimer会...
在JavaScript编程中,定时器(Timer)是常用于实现异步操作的重要工具,例如延迟执行、周期性执行任务。然而,如果不妥善管理,定时器可能会引发一些问题,比如多次调用定时器导致叠加,以及定时器无法清除。本文将...
2. **定义回调**:创建一个继承自`ACE_Event_Handler`的类,重写`handle_timeout()`方法来定义定时器到期后的行为。 3. **添加定时器**:使用`ACE_Timer_Queue::schedule()`方法添加定时器,传入`ACE_Time_Value`、...
### 二、定时器的基本概念 定时器是一种可以实现定时或计数功能的硬件模块。在51单片机中,有两个16位的定时器/计数器,即定时器0(Timer0)和定时器1(Timer1)。这两个定时器既可以作为定时器使用,也可以作为...
2. 计数器预装载寄存器:在启动定时器之前,需要将期望的计数值写入预装载寄存器。当计数器计数达到这个值时,就会触发中断或者复位计数器。 3. 中断设置:每个定时器都可能有自己的中断标志位,当计数器达到预设值...
2. 初始化定时器:调用`timer_init()`函数,指定定时器编号和工作模式。 3. 设置计数器值:使用`timer_set_counter_value()`设定初始计数值或预设阈值。 4. 配置中断:通过`timer_enable_intr()`开启中断,并使用`...
555集成定时器是一种非常常见的电子元器件,其在电子设计中扮演着重要的角色,广泛应用在各种电子设备中,如电子控制、检测、仪表、家电、音响、报警系统、玩具等。555定时器的独特之处在于它结合了模拟电路和数字...
2. **定时时间计算**:输入所需的时间周期或频率,工具会自动计算出对应的定时器初值。这涵盖了定时器的预分频器设置和定时寄存器的数值,帮助开发者快速配置定时器。 3. **计数次数计算**:在计数器模式下,可以...
在嵌入式系统或者实时操作系统(RTOS)的开发中,定时器是不可或缺的组件,用于实现各种时间相关的功能,如任务调度、事件触发、超时检测等。标题提到的“多定时器复用一个硬件定时器”是一种高效利用硬件资源的技术...
2. **主频**:STM32微控制器的主频是指其处理器运行的时钟频率,通常以MHz为单位。它是计算定时器周期的基础,因为定时器的计数值是相对于主频来确定的。 3. **预分频器**:预分频器(Prescaler)用于降低系统时钟...
2. 创建接口:为了让C#代码能够访问C++类,我们需要定义一个匹配的.NET接口。这个接口将包含C++类中的方法声明,例如启动定时器、停止定时器等。 3. 实例化并调用:在C#代码中,我们通过接口实例化C++/CLR封装的...
2. uni-app中的定时器使用: - 在uni-app中,我们同样可以直接使用JavaScript的定时器API。例如,要在5秒后执行某个函数,可以这样写: ```javascript setTimeout(function() { console.log('定时器触发'); }, ...
- `Listings` 和 `Objects` 目录:可能包含编译后的汇编代码列表和目标文件,用于链接成可烧录到单片机的二进制程序。 通过以上分析,我们可以了解到,利用51单片机的定时器功能实现LED闪烁,涉及了定时器配置、...
2. `timesetDlg.cpp` 和 `timesetDlg.h`:分别包含了对话框类的实现和声明,对话框是MFC应用程序中用户交互的主要界面。 3. `timeset.cpp` 和 `timeset.h`:这是主应用程序类的实现和声明,其中会包含初始化、消息...
TimerReset函数用于设置定时器的当前值,由第二个参数设定,函数的语法为!TimerReset(定时器号,数值),返回值为数值型,返回值=0表示调用成功,<>0表示调用失败。例如,!TimerReset(1,12)用于设置1号定时器...