Java的Spring框架下RMI與quartz的調(diào)用方法
Spring調(diào)用RMI
RMI(Remote Method Invocation) 遠(yuǎn)程方法調(diào)用,實(shí)現(xiàn)JAVA應(yīng)用之間的遠(yuǎn)程通信。下面介紹使用Spring如何使用RMI。
包的結(jié)構(gòu)如下:

定義調(diào)用接口
public interface UserDao {
public String getUser(String username)throws Exception;
}
接口實(shí)現(xiàn)類
public class UserDaoImplimplements UserDao {
public String getUser(Stringusername)throws Exception {
return"test:"+username;
}
}
(1)配置RMI服務(wù):
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)啟動(dòng)RMI服務(wù):
public class RmiServer {
publicstaticfinal ApplicationContextcontext =new ClassPathXmlApplicationContext("applicationContext-rmi-server.xml");
publicstaticvoid main(String[] args) {
}
}
(3)訪問RMI服務(wù)
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調(diào)用quartz
1.quartz是一個(gè)作業(yè)調(diào)度框架,spring集成的quartz,使用非常方便。
2.編寫執(zhí)行類
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設(shè)置為false 則不用實(shí)例化
//context.getBean("startQuertz");
System.out.print("Test end..");
}
}
3.編寫配置文件
<!-- 要調(diào)用的工作類 -->
<bean id="quartzJob" class="com.quartz.QuartzJob"/>
<!-- 定義調(diào)用對(duì)象和調(diào)用對(duì)象的方法 -->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="quartzJob" />
<property name="targetMethod" value="work" />
</bean>
<!-- 定義觸發(fā)時(shí)間 -->
<bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="jobDetail"/>
</property>
<!-- cron表達(dá)式 -->
<property name="cronExpression">
<value>2/5 44-46 22,23 9 9 ? 2012</value>
<!--
從左到右分別是:秒、分、時(shí)、日、月、年、星期
? 號(hào)只能用在日和周域上,但是不能在這兩個(gè)域上同時(shí)使用。你可以認(rèn)為 ? 字符是 "我并不關(guān)心在該域上是什么值。" 這不同于星號(hào),星號(hào)是指示著該域上的每一個(gè)值。? 是說不為該域指定值。
逗號(hào) (,) 是用來在給某個(gè)域上指定一個(gè)值列表的。例如,使用值 0,15,30,45 在秒域上意味著每15秒觸發(fā)一個(gè) trigger。
斜杠 (/) 是用于時(shí)間表的遞增的。我們剛剛用了逗號(hào)來表示每15分鐘的遞增,但是我們也能寫成這樣 0/15。
中劃線 (-) 用于指定一個(gè)范圍。例如,在小時(shí)域上的 3-8 意味著 "3,4,5,6,7 和 8 點(diǎn)。" 域的值不允許回卷,所以像 50-10 這樣的值是不允許的。
星號(hào)(*) 指示著你想在這個(gè)域上包含所有合法的值。例如,在月份域上使用星號(hào)意味著每個(gè)月都會(huì)觸發(fā)這個(gè) trigger。
字母L 說明了某域上允許的最后一個(gè)值。它僅被日和周域支持。
W 字符代表著平日 (Mon-Fri),并且僅能用于日域中。它用來指定離指定日的最近的一個(gè)平日(非周六日)。
# 字符僅能用于周域中。它用于指定月份中的第幾周的哪一天。例如,如果你指定周域的值為 6#3,它意思是某月的第三個(gè)周五 (6=星期五,#3意味著月份中的第三周)。
-->
</property>
</bean>
<!-- 總管理類 如果將lazy-init='false'那么容器啟動(dòng)就會(huì)執(zhí)行調(diào)度程序 -->
<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.關(guān)于cronExpression表達(dá)式
<!-- cron表達(dá)式 --> <property name="cronExpression"> <value>2/5 44-46 22,23 9 9 ? 2012</value> <!-- 從左到右分別是:秒、分、時(shí)、日、月、年、星期 ? 號(hào)只能用在日和周域上,但是不能在這兩個(gè)域上同時(shí)使用。 你可以認(rèn)為 ? 字符是 "我并不關(guān)心在該域上是什么值。" 這不同于星號(hào),星號(hào)是指示著該域上的每一個(gè)值。 ? 是說不為該域指定值。 逗號(hào) (,) 是用來在給某個(gè)域上指定一個(gè)值列表的。例如,使用值 0,15,30,45 在秒域上意味著每15秒觸發(fā)一個(gè) trigger。 斜杠 (/) 是用于時(shí)間表的遞增的。我們剛剛用了逗號(hào)來表示每15分鐘的遞增,但是我們也能寫成這樣 0/15。 中劃線 (-) 用于指定一個(gè)范圍。例如,在小時(shí)域上的 3-8 意味著 "3,4,5,6,7 和 8 點(diǎn)。" 域的值不允許回卷,所以像 50-10 這樣的值是不允許的。 星號(hào)(*) 指示著你想在這個(gè)域上包含所有合法的值。例如,在月份域上使用星號(hào)意味著每個(gè)月都會(huì)觸發(fā)這個(gè) trigger。 字母L 說明了某域上允許的最后一個(gè)值。它僅被日和周域支持。 W 字符代表著平日 (Mon-Fri),并且僅能用于日域中。它用來指定離指定日的最近的一個(gè)平日(非周六日)。 # 字符僅能用于周域中。它用于指定月份中的第幾周的哪一天。例如,如果你指定周域的值為 6#3,它意思是某月的第三個(gè)周五 (6=星期五,#3意味著月份中的第三周)。 -->
相關(guān)文章
Netty事件循環(huán)主邏輯NioEventLoop的run方法分析
這篇文章主要介紹了Netty事件循環(huán)主邏輯NioEventLoop的run方法分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
springMvc請(qǐng)求的跳轉(zhuǎn)和傳值的方法
本篇文章主要介紹了springMvc請(qǐng)求的跳轉(zhuǎn)和傳值的方法,這里整理了幾種跳轉(zhuǎn)方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02
WIN7系統(tǒng)JavaEE(java)環(huán)境配置教程(一)
這篇文章主要介紹了WIN7系統(tǒng)JavaEE(java+tomcat7+Eclipse)環(huán)境配置教程,本文重點(diǎn)在于java配置,感興趣的小伙伴們可以參考一下2016-06-06
Spring Security 自動(dòng)踢掉前一個(gè)登錄用戶的實(shí)現(xiàn)代碼
這篇文章主要介紹了Spring Security 自動(dòng)踢掉前一個(gè)登錄用戶的實(shí)現(xiàn)代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
Spring配置數(shù)據(jù)源的三種方式(小結(jié))
本文主要介紹了Spring配置數(shù)據(jù)源的三種方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
Java 數(shù)組交集的實(shí)現(xiàn)代碼
這篇文章主要介紹了Java 數(shù)組交集的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

