1. งานสปริงที่กำหนดเวลาจะถูกดำเนินการสองครั้ง
การทำซ้ำปัญหาและการวิเคราะห์
เมื่อเร็ว ๆ นี้ฉันใช้กรอบงานเวลาควอตซ์และพบว่าไม่มีปัญหากับการดำเนินการด้านสภาพแวดล้อมการพัฒนา หลังจากปรับใช้กับเซิร์ฟเวอร์ฉันพบว่างานได้ดำเนินการหลายครั้งในเวลาเดียวกัน หลังจากค้นหาฉันพบว่ามีปัญหากับไฟล์การกำหนดค่า TOMCAT บนเซิร์ฟเวอร์
ไฟล์กำหนดค่าดั้งเดิม - server.xml มีดังนี้:
<host name = "localhost" appbase = "webapps" unpackwars = "true" autodeploy = "true"> <valve classname = "org.apache.catalina.valves.accesslogvalve" directory = "logs" prefix = "localhost_access_log" /> </โฮสต์> <ชื่อโฮสต์ = "www.xxx.com" appbase = "webapps" unpackwars = "true" autodeploy = "true" xmlvalidation = "false" xmlnamespaceaware = "false"> <path = "docBase ="/usr/local/tomcat/apache-tomcat- reloadable = "true"> </context> </most>
โฮสต์แสดงถึงคอนเทนเนอร์ที่สามารถมีหลายบริบท (แอปพลิเคชัน) ไฟล์การกำหนดค่าข้างต้นหมายถึง: คอนเทนเนอร์สองตัวได้รับการกำหนดค่าใน Tomcat, One Name = LocalHost, Root Directory ของแอปพลิเคชันคือ WebApps และแพ็คเกจสงครามจะถูกบีบอัดโดยอัตโนมัติและปรับใช้โดยอัตโนมัติ หากไม่ได้ระบุบริบทเว็บแอปพลิเคชันทั้งหมดในไดเรกทอรีรูทจะถูกปรับใช้ หลังจากการปรับใช้สำเร็จแล้วเครือข่ายภายนอกสามารถเข้าถึงได้ผ่านชื่อเซิร์ฟเวอร์ IP + ชื่อโครงการ ชื่ออื่น = www.xxx.com ซึ่งแตกต่างจากโฮสต์แรกได้รับการกำหนดค่าด้วยเว็บแอปพลิเคชันหน้าแรกและไม่จำเป็นต้องเข้าถึงด้วยชื่อโครงการ หลังจากการปรับใช้สำเร็จคุณสามารถเข้าถึงได้ผ่านชื่อโดเมน + ชื่อโครงการและโครงการที่โฮมเพจสามารถเข้าถึงได้โดยตรงผ่านชื่อโดเมนรูท
ในเวลานี้ปัญหาเกิดขึ้น โครงการที่มีงานกำหนดเวลาถูกปรับใช้ในไดเรกทอรี WebApps คอนเทนเนอร์อิสระสองรายการใน Tomcat ถูกปรับใช้หนึ่งครั้งซึ่งเทียบเท่ากับโครงการที่ถูกปรับใช้สองครั้งบน Tomcat บนเซิร์ฟเวอร์ ทั้งสองฝ่ายจะทำงานตามกำหนดเวลาในเวลาเดียวกันและมีการระบุฐานข้อมูลเดียวกัน
การแก้ปัญหา
ดังนั้นเพื่อที่จะไม่ส่งผลกระทบต่อการเข้าถึงโครงการอื่น ๆ ให้มากที่สุดเท่าที่จะเป็นไปได้ฉันได้ทำการประนีประนอมและกล่าวว่าโครงการที่ต้องดำเนินการตามกำหนดเวลาจะถูกปรับใช้แยกต่างหากในโฟลเดอร์อื่นเช่น Webroot และใช้โฮสต์ชื่อโดเมนเท่านั้น หลังจากแก้ไขไฟล์การกำหนดค่าสิ่งต่อไปนี้มีดังนี้:
<host name = "localhost" appbase = "webapps" unpackwars = "true" autodeploy = "true"> <valve classname = "org.apache.catalina.valves.accesslogvalve" directory = "logs" prefix = "localhost_access_log" /> </host> <host name = "www.xxx.com" appbase = "" unpackwars = "true" autodeploy = "true" xmlvalidation = "false" xmlnamespaceaware = "false"> <path = "" docBase = "/usr/local/tomcat/apache-tomcat-8. RELOADABLE = "true"> </context> <context path = "/projecta" docBase = "/usr/local/tomcat/apache-tomcat-8.5.9/webapps/projecta" reloadable = "true"> </บริบท> reloadable = "true"> </context> <context path = "/projectc" docBase = "/usr/local/tomcat/apache-tomcat-8.5.9/webroot/projectc" reloadable = "true"> </context>
คุณจะเห็นว่า ProjectC เป็นโครงการที่มีงานกำหนดเวลา หลังจากการปรับใช้ที่ประสบความสำเร็จยกเว้นโครงการที่สามารถเข้าถึงได้ผ่านชื่อโดเมนเท่านั้นวิธีการเข้าถึงของโครงการอื่น ๆ ยังคงไม่เปลี่ยนแปลงจากก่อนหน้านี้ ในเวลาเดียวกันปัญหาได้รับการแก้ไขและงานเวลาจะถูกดำเนินการเพียงครั้งเดียว
อีกคำพูดออนไลน์
<host name = "localhost" appbase = "webapps" unpackwars = "true" autodeploy = "true"> <context docbase = "projecta" path = "" reloadable = "true" /> < /host>
มีโฮสต์เดียวเท่านั้น เมื่อ Tomcat เริ่มต้นโครงการทั้งหมดในไดเรกทอรีรูทจะถูกปรับใช้หนึ่งครั้งจากนั้นบริบทจะถูกนำไปใช้อีกครั้งซึ่งจะทำให้งานเวลาถูกดำเนินการสองครั้ง
มีวิธีแก้ไขปัญหานี้มากมาย:
2. ปัญหาการปรับใช้ Tomcat ช้า
เซิร์ฟเวอร์ Alibaba Cloud ที่ฉันใช้นั้นช้ามากเมื่อปรับใช้ Tomcat แต่คลาวด์อาลีบาบาใหม่ที่ฉันซื้อในภายหลังไม่มีปัญหานี้ หลังจากปรับใช้โครงการแล้วมันจะเป็น
ข้อมูล [localhost-startstop-1] org.apache.catalina.startup.hostconfig.deployDirectory การปรับใช้ไดเรกทอรีเว็บแอปพลิเคชัน /opt/apache-tomcat-8.0.15-server/webapps/root
ใช้เวลาหลายนาทีในการดำเนินการต่อที่นี่ ฉันเคยคิดว่ามันเป็นเหตุผลการกำหนดค่าเซิร์ฟเวอร์ แต่หลังจากนั้นฉันก็ค้นพบโดยบังเอิญว่ามันเป็นเหตุผลการกำหนดค่า JRE หลังจากอ้างถึงหลายบล็อกฉันพบว่า Oracle ให้เหตุผลและวิธีแก้ปัญหาภายใต้เอกสารของ WebLogic
ห้องสมุดที่ใช้สำหรับการสร้างตัวเลขแบบสุ่มใน JVM ของ Sun อาศัย /dev /random โดยค่าเริ่มต้นสำหรับแพลตฟอร์ม UNIX สิ่งนี้สามารถบล็อกกระบวนการ WebLogic SIP Server เนื่องจากในบางระบบปฏิบัติการ /dev /random รอสำหรับ "เสียง" จำนวนหนึ่งที่จะสร้างขึ้นบนเครื่องโฮสต์ก่อนที่จะส่งคืนผลลัพธ์ แม้ว่า /dev /random มีความปลอดภัยมากขึ้น แต่ BEA แนะนำให้ใช้ /dev /urandom หากการกำหนดค่า JVM เริ่มต้นจะทำให้เซิร์ฟเวอร์ SIP เริ่มต้นเริ่มต้น
ความหมาย:
วิธีการแก้ไข:
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com