คำถามติดแท็ก spring

Spring เป็นเฟรมเวิร์กโอเพนซอร์สที่ใช้โมดูลเพื่อสร้างแอปพลิเคชัน Java / Java EE ที่มีประสิทธิภาพ

2
Spring + Hibernate เลือกแทน EJB 3 หรือไม่
ฉันเข้าใจว่าเมื่อใดก็ตามที่โครงการ JEE ใหม่เริ่มต้นขึ้น (ซึ่งจะใช้เทคโนโลยีเหล่านี้) คนต้องการใช้การผสมผสานของ Spring + Hibernate แทนที่จะเป็น EJB 3 ดูเหมือนว่าผู้เขียนโปรแกรมรุ่นเยาว์จะได้รับคำแนะนำให้ทำเช่นนั้นแทนที่จะเป็น EJB การตั้งค่าส่วนตัวนี้หรือมีเหตุผลที่เกี่ยวข้องหรือไม่ (เช่นแผลเป็นส่วนบุคคลที่สร้างโดยรุ่น EJB ก่อนหน้าซึ่งทำให้เกิดความไม่ไว้วางใจใน EJB หรือเทคโนโลยีขยายตัวเมื่อเทียบกับเหตุผลด้านประสิทธิภาพหรือเส้นโค้งการเรียนรู้)

2
โครงสร้างของ RESTful Service พร้อม Java Spring สำหรับผู้เริ่มต้น
ฉันค่อนข้างใหม่ในแง่ของทักษะการพัฒนาเว็บ Java ฉันมีโครงการที่ฉันคิดว่าจะทำให้ผู้สมัครที่ดีสำหรับบริการ RESTful จากสิ่งที่ฉันเข้าใจเกี่ยวกับ API น้อย ฉันพยายามที่จะดูรายละเอียดว่ามันควรจะมีโครงสร้างอย่างไร แต่ไม่ได้ไปที่ใดก็ได้ในแง่ของการค้นหาของ google และอ่านเนื้อหาที่ฉันมีอยู่แล้ว ฉันหวังว่าโพสต์นี้จะให้การตรวจสอบและ / หรือการเปลี่ยนเส้นทางในแง่ของความรู้และสมมติฐานของฉันในหัวข้อนี้ ข้อสันนิษฐานปัจจุบันของฉันคือการให้บริการที่สงบของฉันจะมีโครงสร้างดังต่อไปนี้: ข้อมูลฐานข้อมูล (SQL) ORM (ฉันใช้ ORM ที่ค่อนข้างไม่เป็นที่นิยมเรียกว่า CPO แต่สิ่งนี้จะถูกแทนที่ด้วย Hibernate กับคนส่วนใหญ่) คลาสผู้จัดการ Java ด้วยวิธีการที่พูดคุยกับ ORM เพื่อรับข้อมูล คลาสตัวควบคุม Java / คลาสที่จัดการการแมปคำขอและใช้@ResponseBodyเพื่อกำหนด / จัดการ URL และการกระทำของวิธีการจัดการข้อมูลผ่านทางคำกริยา HTTP ( http://mysite.com/computers/dellอาจมีการGETร้องขอด้วยคำว่า "dell" ใน URL เป็นพารามิเตอร์ที่จะส่งคืนอาร์เรย์ของข้อมูล JSON เกี่ยวกับคอมพิวเตอร์เดลล์) บริการนี้ควรทำด้วย Spring Boot …

1
เหตุใดจึงเป็นความคิดที่ไม่ดีที่จะแบ่งปันอินเทอร์เฟซระหว่างเซิร์ฟเวอร์และไคลเอนต์
ฉันอ่านเอกสารSpring Cloud Netflixเมื่อฉันค้นพบวิธีแชร์อินเทอร์เฟซระหว่างเซิร์ฟเวอร์ HTTP และไคลเอนต์ พวกเขาใช้ตัวอย่างนี้สำหรับ microservices แม้ว่าจะไม่มีเหตุผลว่าทำไมมันถึงขยายไปยังการสื่อสาร HTTP ทั่วไปไม่ได้: // The shared interface, in a common library public interface UserService { @RequestMapping(method = GET, value = "/users/{id}") User getUser(@PathVariable long id); } // The controller, on the server @RestController public class UserResource implements UserService { } // The same …

1
บริการ REST เป็นแอปพลิเคชันเซิร์ฟเวอร์สำหรับเครื่องไคลเอนต์ 2000+ เครื่อง มันเป็นความคิดที่ดีหรือไม่?
เราจะสร้างระบบด้วย UI ใน javaFx ที่จะนำไปใช้กับเครื่องมากกว่า 2000 เครื่อง (ขั้นต่ำคือ 2000 แต่จะมีมากขึ้น - สามารถเข้าถึงเครื่องได้ 5,000 เครื่อง) ด้วยเหตุผล / ข้อ จำกัด อื่น ๆ จะต้องติดตั้งบนเครื่องดังนั้นเราจึงไม่สามารถทำได้ด้วยเว็บเบราว์เซอร์อินเตอร์เฟส เครื่องจักรกว่า 2,000 เครื่องจะอยู่ในกลุ่มที่ตั้งทางภูมิศาสตร์ที่แตกต่างกัน โดยทั่วไปแล้วการเชื่อมต่อนั้นดี แต่อาจไม่ดีในสถานที่ห่างไกล แทนที่จะเข้าถึงฐานข้อมูลโดยตรงฉันกำลังคิดถึงการสร้างคลัสเตอร์เซอร์วิส REST ด้วย Spring + Spring Boot + Spring Data (java) เซอร์วิส REST จะยอมรับและส่งคืน Json ฉันคิดว่ามันเป็นความคิดที่ดีเพราะ: บริการจะทำหน้าที่เป็นกลุ่มการเชื่อมต่อฐานข้อมูล (ฉันคิดว่าการเชื่อมต่อ 2000+ บนฐานข้อมูลอาจทำให้เกิดปัญหา); เป็นไปได้ที่จะมีฐานข้อมูลพร้อมบันทึกการจัดส่งไปยังฐานข้อมูลแบบอ่านอย่างเดียวอื่น ๆ มันจะขยายขนาดได้ดีขึ้นเนื่องจากเราสามารถเพิ่มเครื่องจักรให้ทำงานบริการ REST …
11 java  design  rest  spring 

3
DDD - รูปแบบโดเมนโลหิตจางเป็นปฏิปักษ์หรือไม่? เราใช้โมเดลโดเมนที่หลากหลายใช่ไหม [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา รูปแบบของโดเมนโลหิตจางถูกวิพากษ์วิจารณ์เมื่อนานมาแล้วโดยEvans และ Fowlerเนื่องจากเห็นได้ชัดว่ามันขัดกับหลักการเชิงวัตถุ ฯลฯ ชุมชน DDD นั้นสอดคล้องกับข้อความนี้อย่างชัดเจน อย่างไรก็ตามในช่วงไม่กี่ปีที่ผ่านมามีเสียงไม่เห็นด้วยที่อ้างว่ามันไม่ได้เป็นปฏิปักษ์เลยและเป็นตัวอย่างของการปฏิบัติตามหลักการของโซลิด ฉันใช้งาน Spring Framework มาหลายปีแล้ว ทุกโครงการในทุก บริษัท มีชั้นบริการที่มีตรรกะทางธุรกิจอยู่เสมอโดยใช้แหล่งเก็บข้อมูลที่ทำงานกับโมเดลโลหิตจาง (เอนทิตี JPA) นอกจากนี้ตัวอย่างส่วนใหญ่แม้แต่คนที่เป็นทางการจากพวก Spring ก็แสดงวิธีการทำงานนี้ คำถามของฉันคือ: โมเดลโดเมนโลหิตจางยังถือว่าเป็น antipattern หรือไม่? เราทุกคนทำสิ่งต่าง ๆ (เกี่ยวกับ DDD) ผิดหรือเปล่า? คุณไม่คิดว่าการมีโมเดล Rich Domain ละเมิดหลักการของ SOLID หรือไม่

1
วิธีโยกย้าย webapp ดั้งเดิมที่มีอยู่เพื่อใช้ OAuth2
ขณะนี้ฉันมีเว็บแอพพลิเคชั่นเสาหินอายุ 15 ปีที่มีผู้ใช้งานเกือบ 1 ล้านคนโดยใช้ระบบการอนุญาตและรับรองความถูกต้อง: JAAS ชื่อผู้ใช้ & ร้านค้า pwds ในฐานข้อมูลด้วยการแฮชรหัสผ่านขั้นพื้นฐาน อัลกอริทึมคร่ำเครียด ฯลฯ ) ฉันจะปรับปรุงแอปพลิเคชั่นในช่วง 12-18 เดือนข้างหน้าโดยเน้นที่ UI เป็นหลัก แต่จะค่อยๆอัพเกรดชิ้นส่วนพื้นฐานเช่นกัน (อัพเกรดเป็น Spring, Spring Security, เป็นต้น) ภายในโครงการนี้เราได้ตัดสินใจที่จะแก้ไขปัญหาการอัพเกรด UI แบบโมดูลต่อโมดูล ทำให้แต่ละโมดูลพร้อมใช้งานเมื่อเสร็จสมบูรณ์ โอกาสที่สมบูรณ์แบบในการแบ่งเสาหินออกเป็นเว็บแอปแต่ละอัน (ทั้งหมดยังคงการออกแบบ UX ที่เหมือนกัน) ที่ฉันพยายามจะวางแผนเรื่องนี้อยู่ที่ระดับการรับรองความถูกต้อง & การอนุญาต ฉันต้องการโซลูชันการตัดขวางที่จะอาร์คโมดูลทั้งหมดดังนั้นเมื่อผู้ใช้ถูกส่งจากเว็บแอปหนึ่งไปยังอีกเว็บหนึ่งนั่นเป็นการเปลี่ยนที่ราบรื่น - พวกเขาไม่รู้ด้วยซ้ำว่าพวกเขาอยู่ในเว็บแอพที่แตกต่างกัน OAuth2 ฟังดูเหมือนเป็นโซลูชั่นที่สมบูรณ์แบบ ฉันกำลังพยายามเข้าใจวิธีรวมสิ่งนี้ ฉันต้องสร้างเซิร์ฟเวอร์ OAuth2 ที่กำหนดเองของตัวเองหรือไม่ นั่นทำให้ฉันชอบความคิดที่แย่มาก แต่ฉันจะ: โอนย้ายบัญชีผู้ใช้และกระบวนการอนุญาตทั้งหมดไปยังเซิร์ฟเวอร์ OAuth2 ของบุคคลที่สาม …

2
ติดตามการเปลี่ยนแปลงการกำหนดค่าจาก dev เป็น prod อย่างมีประสิทธิภาพ
คำถามนี้ใช้บริการ Spring Boot เป็นตัวอย่าง แต่อาจเป็นเทคโนโลยีใด ๆ ก็ได้ สมมติว่าต่อไปนี้: สภาพแวดล้อม (dev / QA / prod) เป็นของทีมอื่น ซึ่งหมายความว่า dev ต้องไม่มีสิทธิ์เข้าถึงการกำหนดค่า prod การกำหนดค่า (สมมุติว่า application.properties) ถูกทำให้เป็นภายนอกไม่ใช่ส่วนหนึ่งของไบนารี ไบนารี / แพ็คเกจเดียวกัน (สมมุติว่า service.jar) ถูกปรับใช้ในแต่ละสภาพแวดล้อมและควบคุมโดยการปรับใช้อัตโนมัติ ในขณะที่การเปลี่ยนแปลงสิ่งประดิษฐ์ไบนารี (service.jar) ได้รับการเผยแพร่โดยอัตโนมัติไปยังแต่ละสภาพแวดล้อมการเปลี่ยนแปลงการกำหนดค่ายังคงต้องมีการแทรกแซงด้วยตนเองซึ่งท้ายที่สุดก็กลายเป็นถูกทำข้อมูลให้ตรงกันในแต่ละสภาพแวดล้อม ตัวอย่างเช่นสมมติว่าทีม dev เพิ่มคู่ของคีย์ - ค่าลงในแอปพลิเคชันคุณสมบัติในสภาพแวดล้อมของพวกเขา อะไรจะเป็นวิธีที่ดีที่สุดในการบันทึกคีย์ใหม่เหล่านี้ดังนั้นเมื่อการปรับใช้เกิดขึ้นในทีม ops พวกเขารู้ว่าต้องเพิ่มคีย์ใดดังนั้นความเสี่ยงของการเริ่มบริการใหม่และการเห็นว่าล้มเหลวเนื่องจากคีย์ที่หายไป ฉันรู้ว่าจะมีขั้นตอนที่ต้องดำเนินการด้วยตนเอง แต่ฉันต้องการที่จะรู้ว่าผู้คนจัดการกับเรื่องนี้อย่างไรและหาวิธีที่มีประสิทธิภาพมากที่สุด

2
การซิงโครไนซ์กับระบบออฟไลน์
ฉันออกแบบระบบที่ฉันจะซิงโครไนซ์ข้อมูลธุรกิจจากอุปกรณ์มือถือ (ที่มีแอพพลิเคชั่นแบบฝัง) ที่สร้างข้อมูลและส่งกลับไปที่เซิร์ฟเวอร์ แต่ละบรรทัดที่ซิงโครไนซ์จะสร้างบันทึกธุรกิจเฉพาะในฐานข้อมูล หากสิ่งที่ฉันซิงโครไนซ์สร้างข้อมูลด้วยวันที่ (ภายในข้อมูลซิงค์) ที่ต่ำกว่าวันที่แก้ไขล่าสุดของข้อมูลธุรกิจของฉันฉันต้องละเว้นมันและเพียงเพิ่มฐานข้อมูลเข้าสู่ระบบ เมื่อประมวลผลข้อมูลที่อัพโหลดแล้วข้อมูลจะถูกดึงจากฐานข้อมูลและดาวน์โหลดไปยังอุปกรณ์ เนื่องจากการดาวน์โหลดนี้ทันทีหลังจากเขียนการซิงค์จึงต้องตรงกัน เป็นไปได้ที่จะยังคงมีรูปแบบตัวอ่าน / ตัวเขียนถ้าสิ่งนี้มีค่าพอที่จะแทนที่โซลูชันที่มีอยู่ สิ่งที่สำคัญกว่าคือการสามารถดาวน์โหลดข้อมูลที่ทันสมัย ข้อมูลที่ถูกดึงมาทั้งหมดไม่มีการใช้งานที่แตกต่างกันในขณะนี้ (มันอาจมาในภายหลัง แต่นั่นจะไม่เป็นปัญหา) ฉันอาจมีการซิงโครไนซ์หลายครั้งบนวัตถุทางธุรกิจเดียวกันที่ทำงานอยู่มันไม่น่าเป็นไปได้ แต่สามารถเกิดขึ้นได้และฉันชอบที่จะสามารถจัดการกับมันได้ คาดว่าการซิงโครไนซ์จะคงอยู่เป็นเวลาไม่กี่วินาที แต่ไม่กี่นาทีเว้นแต่ว่าจะใช้แอปพลิเคชันมือถือในตัวโดยไม่มีการซิงค์อีกหลายวัน ปริมาณของข้อมูลที่ซิงโครไนซ์ไม่คาดว่าจะมีขนาดใหญ่ทั้งกระบวนการซิงโครไนซ์ ดังนั้นฉันจึงลงเอยด้วยการแยกซึ่งกันและกันในวิธีการซิงโครไนซ์ของฉันแม่นยำมากขึ้นฉันใช้ Java และฉันใส่ซิงโครไนซ์กับวิธีการเขียนไม่ใช่กระบวนการซิงโครไนซ์ทั้งหมดเพื่อไม่บล็อกการซิงค์แบบอ่านอย่างเดียว ผมอยากจะรู้ว่า : หากวิธีนี้เหมาะสม ตราบใดที่ปริมาณและเวลาของกระบวนการซิงโครไนซ์ยังคงยอมรับได้ โดยทั่วไปแล้วฉันควรจะดูแนวคิดอะไร โบนัส: หากมีการนำแนวคิดเหล่านี้ไปใช้ในโมดูล Spring

2
ค่อยๆย้าย codebase ไปยังคอนเทนเนอร์ฉีดที่ต้องพึ่งพา
ฉันมี codebase ขนาดใหญ่ที่มีซิงเกิล "anti-pattern" จำนวนมากคลาสยูทิลิตี้ที่มีวิธีการคงที่และคลาสที่สร้างการอ้างอิงของตนเองโดยใช้newคำหลัก มันทำให้รหัสยากมากที่จะทดสอบ ฉันต้องการที่จะโยกย้ายรหัสไปยังภาชนะฉีดพึ่งพา (ในกรณีของฉันมันGuiceเพราะมันเป็นGWTโครงการ) จากความเข้าใจของฉันเกี่ยวกับการฉีดขึ้นอยู่กับมันทั้งหมดหรือเปล่า คลาสทั้งหมดได้รับการจัดการโดย Spring / Guice หรือไม่ เนื่องจาก codebase มีขนาดใหญ่ฉันไม่สามารถแปลงรหัสข้ามคืนได้ ดังนั้นฉันต้องการวิธีที่จะทำมันค่อยๆ ปัญหาคือเมื่อฉันเริ่มต้นด้วยคลาสที่ต้องถูกฉีดเข้าไปในคลาสอื่นฉันไม่สามารถใช้วิ@Injectในคลาสเหล่านั้นได้เนื่องจากคลาสเหล่านั้นยังไม่ได้รับการจัดการโดยคอนเทนเนอร์ ดังนั้นสิ่งนี้จะสร้างสายโซ่ยาวขึ้นไปถึงคลาส "สุดยอด" ที่ไม่ได้ถูกฉีดเข้าไปที่ใดก็ได้ วิธีเดียวที่ฉันเห็นคือการทำให้Injectorบริบท / แอปพลิเคชันทั่วโลกพร้อมใช้งานผ่านซิงเกิลตันในขณะนั้นเพื่อให้คลาสอื่นสามารถรับถั่วที่ถูกจัดการได้ แต่มันขัดแย้งกับแนวคิดสำคัญที่ไม่เปิดเผยcomposition rootแอปพลิเคชัน อีกวิธีคือล่างขึ้นบน: เริ่มต้นด้วยคลาส "ระดับสูง" รวมไว้ในคอนเทนเนอร์ฉีดขึ้นต่อกันและค่อย ๆ เลื่อนลงไปที่คลาส "เล็ก" แต่ฉันต้องรอเป็นเวลานานเนื่องจากฉันสามารถทดสอบชั้นเรียนขนาดเล็กที่ยังคงขึ้นอยู่กับกลม / สถิตยศาสตร์ อะไรจะเป็นวิธีที่จะทำให้เกิดการย้ายถิ่นฐานอย่างค่อยเป็นค่อยไป? ป.ล. คำถามที่ค่อยเป็นค่อยไปวิธีการฉีดพึ่งพาจะคล้ายกันในชื่อ แต่ไม่ตอบคำถามของฉัน

4
Spring - ความสับสนเกี่ยวกับการตั้งค่า?
ที่ไหนสักแห่งที่ฉันอ่านสปริงให้ความสะดวกสบายมากกว่าการตั้งค่า แต่คนในฤดูใบไม้ผลิกำลังนำการเปลี่ยนแปลงมามากมายในการกำหนดค่าซึ่งตอนนี้ฉันเริ่มสับสนแล้วที่จะใช้การกำหนดค่า xml หรือคำอธิบายประกอบ ฉันต้องการให้ทุกคนแนะนำวิธีการ Surefire หรือกฎง่ายๆในการใช้ xml และคำอธิบายประกอบ ตัวอย่างที่ SO เพื่อแสดงว่าผู้เริ่มต้นอย่างฉันเริ่มสับสนกับการกำหนดค่า การเชื่อมโยง-1 ฉันดูเหมือนจะไม่เข้าใจที่อยู่เบื้องหลังการทำงานและ<context:annotation-config><context:component-scan> จากสิ่งที่ฉันได้อ่านพวกเขาดูเหมือนจะจัดการกับคำอธิบายประกอบต่าง ๆ (@Required, @Autowired etc vs @Component, @Repository, @Service ฯลฯ ) แต่จากสิ่งที่ฉันได้อ่านพวกเขาลงทะเบียนคลาสตัวประมวลผล bean โพสต์เดียวกัน เพื่อสร้างความสับสนให้ฉันยิ่งขึ้นมีannotation-configแอตทริบิวต์ใน<context:component-scan>... ลิงค์ 2 ฉันยังมีแท็กสแกนองค์ประกอบ: <context:component-scan base-package="com.mycompany.maventestwebapp" /> แต่ฉันมีแท็กอื่น (ที่ดูเหมือนว่ามีงานที่คล้ายกัน) อันนี้: <annotation-driven /> ความแตกต่างระหว่างสองแท็กเหล่านี้คืออะไร อีกสิ่งที่ "แปลก" คือตัวอย่างก่อนหน้านี้ (ที่ไม่ได้ใช้แท็กคำอธิบายประกอบ) คล้ายกับโครงการสร้างโดย STS โดยใช้โครงการ Spring MVC …
9 java  spring 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.