สายฤดูใบไม้ผลิ RMI
RMI (การเรียกใช้วิธีระยะไกล) การโทรระยะไกลเพื่อรับรู้การสื่อสารระยะไกลระหว่างแอปพลิเคชัน Java ต่อไปนี้อธิบายวิธีการใช้ RMI โดยใช้สปริง
โครงสร้างของแพ็คเกจมีดังนี้:
กำหนดอินเทอร์เฟซการโทร
อินเทอร์เฟซสาธารณะ userdao {public String getUser (ชื่อผู้ใช้สตริง) โยนข้อยกเว้น;}คลาสการใช้งานอินเตอร์เฟส
คลาสสาธารณะ UserDaoImpliMples UserDao {Public String GetUser (StringUserName) พ่นข้อยกเว้น {return "การทดสอบ:"+ชื่อผู้ใช้; -(1) กำหนดค่าบริการ RMI:
ApplicationContext-rmi-server.xml <beanid = "userdaoimpl" class = "com.rmi.userdaoimpl"/> <beanid = "userdaoimpl_exporter" class = "org.springFramework.Remoting.rmi.rmiservice <propertyName = "serviceName" value = "rmi/userdaoimpl"/> <propertyName = "serviceInterface" value = "com.rmi.userdao"/> <porementName = "RegistryPort" value = "8819"/> </ebean>
(2) เริ่มบริการ RMI:
คลาสสาธารณะ rmiserver {PublicStaticFinal ApplicationContextContext = ใหม่ classPathxMlApplicationContext ("ApplicationContext-rmi-server.xml"); PublicStaticVoid Main (String [] args) {}}(3) การเข้าถึงบริการ RMI
ApplicationContext-rmi-client.xml <beanid = "userdaoimpl_client" class = "org.springframework.remoting.rmi.rmiproxyfactoryBean"> <portsName = "serviceUrl" value = "rmi: // localhost: 8819/RMI/RMI/RMI/RMI/ <propertyName = "ServiceInterface" value = "com.rmi.userdao"/> <poreportname = "RefreshstubonNectFailure" value = "true"/> <porementName = "lookupStubonStartup" value = "false"/> </bean> classpathxmlapplicationContext ("ApplicationContext-rmi-client.xml"); UserDao UserDao = (USERDAO) Context.getBean ("UserDaoimpl_client"); if (userdao! = null) {ลอง {system.out.println (userdao.getuser ("li")); } catch (exception e) {e.printstacktrace (); }}}} สปริงโทรควอตซ์
1.quartz เป็นกรอบการจัดตารางงานควอตซ์รวมกับฤดูใบไม้ผลิซึ่งสะดวกมากในการใช้งาน
2. เขียนคลาสการดำเนินการ
นำเข้า org.springframework.context.applicationContext; นำเข้า org.springframework.context.support.classpathxmlapplicationContext; ระดับสาธารณะ Quartztest {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {system.out.println ("ทดสอบเริ่มต้น"); ApplicationContext Context = ใหม่ classPathxMlApplicationContext ("ApplicationContext-quartz.xml"); // ถ้า Lazy-init ของ startquetz bean ถูกตั้งค่าเป็น FALSE ในไฟล์การกำหนดค่าไม่จำเป็นต้องอินสแตนซ์ //Context.getBean("StartQuertz "); System.out.print ("Test End .. "); -3. ไฟล์การกำหนดค่าเขียน
<!-คลาสทำงานที่จะโทร-> <bean id = "quartzjob" /> <!-กำหนดวิธีการเรียกวัตถุและเรียกวัตถุ-> <bean id = "jobDetail"> <property name = "targetObject" ref = "quartzjob" /> <property name = "targetMethod name = "jobDetail"> <ref bean = "JobDetail"/> </คุณสมบัติ> <!-cron expression-> <property name = "cronexpression"> <value> 2/5 44-46 22,23 9 9? 2012 </uald> <!- จากซ้ายไปขวาคือ: วินาทีนาที, เวลา, วัน, เดือนเดือน, ปีและสัปดาห์? ตัวเลขสามารถใช้ได้เฉพาะในโดเมนทั้งวันและสัปดาห์ แต่ไม่สามารถใช้พร้อมกันในสองโดเมนนี้ คุณคิดได้ไหม ตัวละครคือ "ฉันไม่สนใจว่าจะมีค่าอะไรอยู่ในสนาม" สิ่งนี้แตกต่างจากเครื่องหมายดอกจันซึ่งบ่งบอกถึงค่าทุกค่าในฟิลด์ - หมายความว่าไม่มีการระบุค่าสำหรับฟิลด์นี้ เครื่องหมายจุลภาค (,) ใช้เพื่อระบุรายการค่าไปยังฟิลด์ ตัวอย่างเช่นการใช้ค่า 0,15,30,45 ในฟิลด์ที่สองหมายความว่าทริกเกอร์จะถูกกระตุ้นทุก 15 วินาที Slashes (/) ใช้สำหรับตารางเวลาที่เพิ่มขึ้น เราเพิ่งใช้เครื่องหมายจุลภาคเพื่อแสดงการเพิ่มขึ้นทุก ๆ 15 นาที แต่เรายังสามารถเขียนเป็น 0/15 Scribble (-) ใช้เพื่อระบุช่วง ตัวอย่างเช่น 3-8 ในโดเมนชั่วโมงหมายถึง "3, 4, 5, 6, 7 และ 8 คะแนน" ค่าของโดเมนไม่อนุญาตให้ทำการย้อนกลับดังนั้นค่าเช่น 50-10 ไม่อนุญาตให้ใช้ เครื่องหมายดอกจัน (*) บ่งชี้ว่าคุณต้องการรวมค่าทางกฎหมายทั้งหมดในฟิลด์นี้ ตัวอย่างเช่นการใช้เครื่องหมายดอกจันในโดเมนเดือนหมายความว่าทริกเกอร์นี้จะถูกกระตุ้นทุกเดือน ตัวอักษร L ระบุค่าสุดท้ายที่อนุญาตในฟิลด์ ได้รับการสนับสนุนโดยโดเมนรายวันและรายสัปดาห์เท่านั้น อักขระ W แสดงถึงวันธรรมดา (วันจันทร์ถึง-ฟรี) และสามารถใช้ในโดเมนรายวันเท่านั้น มันถูกใช้เพื่อระบุวันธรรมดาที่ใกล้เคียงกับวันที่กำหนด (ไม่ใช่วันเสาร์) # อักขระสามารถใช้ได้เฉพาะในโดเมนอุปกรณ์ต่อพ่วง มันถูกใช้เพื่อระบุวันของสัปดาห์ในเดือนที่กำหนด ตัวอย่างเช่นหากคุณระบุมูลค่าของฟิลด์รายสัปดาห์เป็น 6 #3 นั่นหมายถึงวันศุกร์ที่สามของเดือนที่หนึ่ง (6 = วันศุกร์ #3 หมายถึงสัปดาห์ที่สามของเดือน) -> </คุณสมบัติ> </ebean> <!-คลาสการจัดการทั่วไปถ้าใช้ lazy-init = 'false' คอนเทนเนอร์จะเรียกใช้ตัวกำหนดตารางเวลา-> <bean id = "startQuertz" lazy-init = "false" autowire = "ไม่"> <property name = "Triggers">
4. เกี่ยวกับการแสดงออกของ cronexpression
<!-cron expression-> <property name = "cronexpression"> <value> 2/5 44-46 22,23 9 9? 2012 </uald> <!- จากซ้ายไปขวาคือ: วินาทีนาที, เวลา, วัน, เดือนเดือน, ปีและสัปดาห์? ตัวเลขสามารถใช้ได้เฉพาะในโดเมนทั้งวันและสัปดาห์ แต่ไม่สามารถใช้พร้อมกันในสองโดเมนนี้ คุณคิดได้ไหม ตัวละครคือ "ฉันไม่สนใจว่าจะมีค่าอะไรอยู่ในสนาม" สิ่งนี้แตกต่างจากเครื่องหมายดอกจันซึ่งบ่งบอกถึงค่าทุกค่าในฟิลด์ - หมายความว่าไม่มีการระบุค่าสำหรับฟิลด์นี้ เครื่องหมายจุลภาค (,) ใช้เพื่อระบุรายการค่าไปยังฟิลด์ ตัวอย่างเช่นการใช้ค่า 0,15,30,45 ในฟิลด์ที่สองหมายความว่าทริกเกอร์จะถูกกระตุ้นทุก 15 วินาที Slashes (/) ใช้สำหรับตารางเวลาที่เพิ่มขึ้น เราเพิ่งใช้เครื่องหมายจุลภาคเพื่อแสดงการเพิ่มขึ้นทุก ๆ 15 นาที แต่เรายังสามารถเขียนเป็น 0/15 Scribble (-) ใช้เพื่อระบุช่วง ตัวอย่างเช่น 3-8 ในโดเมนชั่วโมงหมายถึง "3, 4, 5, 6, 7 และ 8 คะแนน" ค่าของโดเมนไม่อนุญาตให้ทำการย้อนกลับดังนั้นค่าเช่น 50-10 ไม่อนุญาตให้ใช้ เครื่องหมายดอกจัน (*) บ่งชี้ว่าคุณต้องการรวมค่าทางกฎหมายทั้งหมดในฟิลด์นี้ ตัวอย่างเช่นการใช้เครื่องหมายดอกจันในโดเมนเดือนหมายความว่าทริกเกอร์นี้จะถูกกระตุ้นทุกเดือน ตัวอักษร L ระบุค่าสุดท้ายที่อนุญาตในฟิลด์ ได้รับการสนับสนุนโดยโดเมนรายวันและรายสัปดาห์เท่านั้น อักขระ W แสดงถึงวันธรรมดา (วันจันทร์ถึง-ฟรี) และสามารถใช้ในโดเมนรายวันเท่านั้น มันถูกใช้เพื่อระบุวันธรรมดาที่ใกล้เคียงกับวันที่กำหนด (ไม่ใช่วันเสาร์) # อักขระสามารถใช้ได้เฉพาะในโดเมนอุปกรณ์ต่อพ่วง มันถูกใช้เพื่อระบุวันของสัปดาห์ในเดือนที่กำหนด ตัวอย่างเช่นหากคุณระบุมูลค่าของฟิลด์รายสัปดาห์เป็น 6 #3 นั่นหมายถึงวันศุกร์ที่สามของเดือนที่หนึ่ง (6 = วันศุกร์ #3 หมายถึงสัปดาห์ที่สามของเดือน) -