เมื่อเร็ว ๆ นี้มีคนจำนวนมากที่ให้คำปรึกษาเกี่ยวกับวิธีการกำหนดค่าแหล่งข้อมูลหลายแหล่งสำหรับฤดูใบไม้ผลิและการตอบคำถามเหล่านั้นเป็นเรื่องยากและการกำหนดค่าในโพสต์บล็อกก่อนหน้านี้ก็เป็นปัญหาเช่นกันดังนั้นฉันจะปล่อยตัวอย่างสำหรับทุกคน
มีแหล่งข้อมูลสองแหล่งในการสาธิตคือ MySQL และ Oracle และการทดสอบอย่างง่ายได้ดำเนินการแล้ว ไม่มีปัญหาในการสลับแหล่งข้อมูลแบบไดนามิก ฉันหวังว่าการสาธิตนี้จะช่วยทุกคนได้
ที่อยู่ดาวน์โหลดตัวอย่าง:
สปริงสลับการสาธิตแหล่งข้อมูลหลายข้อมูลแบบไดนามิก: http://xiazai.vevb.com/201701/yuanma/dynamicdatasourcedemo_jb51.rar
ฉันจะให้คำอธิบายบางอย่างเพื่ออธิบายประเด็นสำคัญเมื่อกำหนดค่าแหล่งข้อมูลหลายข้อมูล:
1. ให้ความสนใจกับการกำหนดค่าของตัวดักการทำธุรกรรม
นี่เป็นสิ่งสำคัญอันดับแรก ก่อนอื่นคุณต้องเข้าใจว่าการจัดการธุรกรรมของฤดูใบไม้ผลินั้นผูกพันกับแหล่งข้อมูล เมื่อโปรแกรมดำเนินการกับเลเยอร์การจัดการธุรกรรม (เช่นบริการ) เนื่องจากการทำธุรกรรมได้ถูกเปิดผ่านตัวดักก่อนเข้าสู่เลเยอร์นี้จึงไม่สามารถสลับแหล่งข้อมูลได้ที่เลเยอร์นี้ เป็นสิ่งสำคัญอย่างยิ่งที่จะต้องเข้าใจหลักการของการทำธุรกรรม ในบทความก่อนหน้าของฉันมันเป็นปัญหาในการกำหนดค่าตัวดักจับเพื่อสลับแหล่งข้อมูลในเลเยอร์ DAO (เพราะมันเป็นตัวอย่างฉันไม่ประมาทและขอโทษสำหรับการทำให้เข้าใจผิดทุกคน) แต่แนวคิดที่ให้ไว้ไม่ใช่ปัญหา
ในการสาธิต DataSourceInterceptor ที่สลับแหล่งข้อมูลจะถูกกำหนดค่าบนเลเยอร์ก่อนหน้าของ Transaction Interceptor (TxAdvice) นั่นคือเลเยอร์คอนโทรลเลอร์
2. ให้ความสนใจกับการสร้างตารางฐานข้อมูล
บางคนชอบใช้ฟังก์ชั่นการสร้างตารางอัตโนมัติของไฮเบอร์เนต แต่ควรสังเกตว่าในแหล่งข้อมูลหลายแหล่งโดยเฉพาะอย่างยิ่งในแหล่งข้อมูลหลายแหล่งของฐานข้อมูลที่แตกต่างกันมันเป็นไปไม่ได้ที่จะสร้างตารางโดยอัตโนมัติ เนื่องจากการสร้างตารางอัตโนมัติไฮเบอร์เนตถูกเรียกใช้เมื่อเริ่มต้นโครงการเฉพาะตารางสำหรับแหล่งข้อมูลเริ่มต้นที่กำหนดค่าโดยโครงการถูกสร้างขึ้นในขณะที่ตารางสำหรับแหล่งข้อมูลอื่น ๆ จะไม่ถูกสร้างขึ้นโดยอัตโนมัติ ทุกคนควรให้ความสนใจ
3. สามารถละเว้นภาษาถิ่นของฐานข้อมูล Hibernate ได้
เมื่อแหล่งข้อมูลหลายแหล่งการตั้งค่าภาษาถิ่นสามารถละเว้นได้ Hibernate จะรับรู้ฐานข้อมูลที่แตกต่างกันโดยอัตโนมัติเมื่อใช้งานดังนั้นจึงไม่จำเป็นต้องกังวลเกี่ยวกับการกำหนดค่านี้และเป็นไปได้ที่จะไม่กำหนดค่า
4. รายงานไม่มีข้อผิดพลาดเซสชันปัจจุบัน
สิ่งนี้เกิดจากการใช้ SessionFactory.getCurrentsession () เซสชันปัจจุบันถูกผูกไว้กับเธรด เธรดจะเปิดเพียงหนึ่งเซสชัน (จะไม่มีข้อผิดพลาดเว้นแต่คุณจะใช้ OpenSession ()) ดังนั้นจึงจำเป็นต้องตั้งค่าความสัมพันธ์ที่มีผลผูกพันระหว่างเซสชันและเธรด
การสาธิตใช้สปริงเพื่อจัดการเซสชันไฮเบอร์เนตดังนั้น OpenSessionInViewFilter จึงถูกกำหนดค่าใน web.xml และ current_session_context_class ถูกกำหนดค่าใน hibernate.cfg.xml [PS: เมื่อใช้สปริงเพื่อจัดการไฮเบอร์เนตคุณสามารถลบ hibernate.cfg.xml และไฟล์การกำหนดค่าของสปริงที่กำหนดค่าทั้งหมดคือ hibernateProperties ขึ้นอยู่กับการตั้งค่าส่วนบุคคล]
ในที่สุดเฟรมเวิร์กบางอย่างก็รวมอยู่ในการสาธิตซึ่งสะดวกสำหรับทุกคนที่จะใช้ มันเป็นประโยชน์สำหรับทุกคน ฉันจะไม่อธิบายการกำหนดค่าและเทคโนโลยีของเฟรมเวิร์กเหล่านั้นที่นี่ หากคุณต้องการทราบคุณสามารถตรวจสอบที่อยู่:
การกำหนดค่าแหล่งที่มาหลายข้อมูลสปริง: //www.vevb.com/article/102282.htm
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น