Spring调用RMI
RMI(Remote Method Invocation) 远程方法调用,实现JAVA应用之间的远程通信。下面介绍使用Spring如何使用RMI。
包的结构如下:
定义调用接口
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"/> <> <bean id="jobDetail"> <property name="targetObject" ref="quartzJob" /> <property name="targetMethod" value="work" /> </bean> <> <bean id="doTime"> <property name="jobDetail"> <ref bean="jobDetail"/> </property> <> <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> <> <bean id="startQuertz" lazy-init="false" autowire="no"> <property name="triggers"> <list> <ref bean="doTime"/> </list> </property> </bean>
4.关于cronExpression表达式
<> <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意味着月份中的第三周)。 -->
【Java的Spring框架下RMI与quartz的调用方法】相关文章:
★ 基于JAVA中使用Axis发布/调用Webservice的方法详解