欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java的Spring框架下RMI与quartz的调用方法

程序员文章站 2024-03-07 08:18:56
spring调用rmi rmi(remote method invocation) 远程方法调用,实现java应用之间的远程通信。下面介绍使用spring如何使用rmi。...

spring调用rmi
rmi(remote method invocation) 远程方法调用,实现java应用之间的远程通信。下面介绍使用spring如何使用rmi。

包的结构如下:

Java的Spring框架下RMI与quartz的调用方法

定义调用接口

public interface userdao {

  public string getuser(string username)throws exception;

}

接口实现类

public class userdaoimplimplements userdao {

  public string getuser(stringusername)throws exception {

    return"test:"+username;

  }

}

(1)配置rmi服务:

applicationcontext-rmi-server.xml

  <beanid="userdaoimpl"class="com.rmi.userdaoimpl"/>

  <beanid="userdaoimpl_exporter"class="org.springframework.remoting.rmi.rmiserviceexporter">

    <propertyname="service"ref="userdaoimpl"/>

    <propertyname="servicename"value="rmi/userdaoimpl"/>

    <propertyname="serviceinterface"value="com.rmi.userdao"/>

    <propertyname="registryport"value="8819"/>

  </bean>

(2)启动rmi服务:

public class rmiserver {

  publicstaticfinal applicationcontextcontext =new classpathxmlapplicationcontext("applicationcontext-rmi-server.xml");

  publicstaticvoid main(string[] args) {

  }

}

(3)访问rmi服务

applicationcontext-rmi-client.xml

  <beanid="userdaoimpl_client"class="org.springframework.remoting.rmi.rmiproxyfactorybean">

    <propertyname="serviceurl"value="rmi://localhost:8819/rmi/userdaoimpl"/>

    <propertyname="serviceinterface"value="com.rmi.userdao"/>

    <propertyname="refreshstubonconnectfailure"value="true"/>

    <propertyname="lookupstubonstartup"value="false"/>

  </bean>

 

public class rmiclient {

  publicstaticvoid main(string[] args) {

    applicationcontext context =new classpathxmlapplicationcontext("applicationcontext-rmi-client.xml");

    userdao userdao = (userdao)context.getbean("userdaoimpl_client");

    if(userdao !=null){

      try {

       system.out.println(userdao.getuser("li"));

      } catch (exception e) {

       e.printstacktrace();

      }

    }

  }

}

spring调用quartz
1.quartz是一个作业调度框架,spring集成的quartz,使用非常方便。

2.编写执行类

import org.springframework.context.applicationcontext; 
import org.springframework.context.support.classpathxmlapplicationcontext; 
 
public class quartztest { 
 
 public static void main(string[] args) { 
 system.out.println("test start."); 
    applicationcontext context = new classpathxmlapplicationcontext("applicationcontext-quartz.xml"); 
    //如果配置文件中将startquertz bean的lazy-init设置为false 则不用实例化 
    //context.getbean("startquertz"); 
    system.out.print("test end.."); 
 } 
 
} 

3.编写配置文件

<!-- 要调用的工作类 --> 
<bean id="quartzjob" class="com.quartz.quartzjob"/> 
 
  <!-- 定义调用对象和调用对象的方法 --> 
<bean id="jobdetail" class="org.springframework.scheduling.quartz.methodinvokingjobdetailfactorybean"> 
 <property name="targetobject" ref="quartzjob" /> 
 <property name="targetmethod" value="work" /> 
</bean> 
 
<!-- 定义触发时间 --> 
  <bean id="dotime" class="org.springframework.scheduling.quartz.crontriggerbean"> 
    <property name="jobdetail"> 
      <ref bean="jobdetail"/> 
    </property> 
    <!-- cron表达式 --> 
    <property name="cronexpression"> 
     <value>2/5 44-46 22,23 9 9 ? 2012</value> 
     <!--  
      从左到右分别是:秒、分、时、日、月、年、星期 
      ? 号只能用在日和周域上,但是不能在这两个域上同时使用。你可以认为 ? 字符是 "我并不关心在该域上是什么值。" 这不同于星号,星号是指示着该域上的每一个值。? 是说不为该域指定值。 
     逗号 (,) 是用来在给某个域上指定一个值列表的。例如,使用值 0,15,30,45 在秒域上意味着每15秒触发一个 trigger。 
     斜杠 (/) 是用于时间表的递增的。我们刚刚用了逗号来表示每15分钟的递增,但是我们也能写成这样 0/15。 
     中划线 (-) 用于指定一个范围。例如,在小时域上的 3-8 意味着 "3,4,5,6,7 和 8 点。" 域的值不允许回卷,所以像 50-10 这样的值是不允许的。 
     星号(*) 指示着你想在这个域上包含所有合法的值。例如,在月份域上使用星号意味着每个月都会触发这个 trigger。 
     字母l 说明了某域上允许的最后一个值。它仅被日和周域支持。 
     w 字符代表着平日 (mon-fri),并且仅能用于日域中。它用来指定离指定日的最近的一个平日(非周六日)。 
     # 字符仅能用于周域中。它用于指定月份中的第几周的哪一天。例如,如果你指定周域的值为 6#3,它意思是某月的第三个周五 (6=星期五,#3意味着月份中的第三周)。 
      --> 
          </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>  

4.关于cronexpression表达式

<!-- cron表达式 -->  
<property name="cronexpression"> <value>2/5 44-46 22,23 9 9 ? 2012</value> 
<!--  
  从左到右分别是:秒、分、时、日、月、年、星期 ? 号只能用在日和周域上,但是不能在这两个域上同时使用。 
  你可以认为 ? 字符是 "我并不关心在该域上是什么值。" 这不同于星号,星号是指示着该域上的每一个值。 
  ? 是说不为该域指定值。  
  逗号 (,) 是用来在给某个域上指定一个值列表的。例如,使用值 0,15,30,45 在秒域上意味着每15秒触发一个 trigger。  
  斜杠 (/) 是用于时间表的递增的。我们刚刚用了逗号来表示每15分钟的递增,但是我们也能写成这样 0/15。  
  中划线 (-) 用于指定一个范围。例如,在小时域上的 3-8 意味着 "3,4,5,6,7 和 8 点。" 域的值不允许回卷,所以像 50-10 这样的值是不允许的。  
  星号(*) 指示着你想在这个域上包含所有合法的值。例如,在月份域上使用星号意味着每个月都会触发这个 trigger。  
  字母l 说明了某域上允许的最后一个值。它仅被日和周域支持。  
  w 字符代表着平日 (mon-fri),并且仅能用于日域中。它用来指定离指定日的最近的一个平日(非周六日)。  
  # 字符仅能用于周域中。它用于指定月份中的第几周的哪一天。例如,如果你指定周域的值为 6#3,它意思是某月的第三个周五 (6=星期五,#3意味着月份中的第三周)。  
-->