thảo luận Có ai đang dùng Spring boot để phát triển ứng dụng java không ạ, cho e hỏi tý

Thằng nào chơi sài noSQL cho core Bank thế. còn mấy cái service nhỏ nhỏ thì muốn sài thì tùy à.
1710929555370.png
 
biết mà, khá là khoai, mình không có kinh nghiệm, nhưng lại là đầu mối, khá khoai:sweat:
lập thớt đọc còm của các thím lại càng mơ hồ thêm
Thoải mái đi fen, xác định các việc phải làm là gì, ngân hàng nó có quy trình, cái gì ko chắc 100 % ko hứa hẹn nhé
 
Mình không dùng MongoDB nhưng cách upgrade chắc tương tự. Kinh nghiệm của mình là thế này:

Đầu tiên là update JDK lên 17, chú ý reflective access. Nếu từ 8 thì lên 11 trước rồi lên 17. Cái 11 nó là warning, lên 17 nó thành error nên nếu không muốn fix code thì phải add mấy cái jvm option --add-opens java.base/java.util=ALL_UNNAMED v.v..
Sau thì bắt đầu lên springboot starter dần 3.0, 3.1 rồi 3.2. Phần lớn thì fix ở mỗi minor version trước, rồi mới upgrade lên minor version sau. Mấy trường hợp đặc biệt mình biết, sẽ nói sau.
Springboot nó đi theo cả cụm dependencies nên mới làm sẽ khá thốn.

Sau khi lên JDK 17

1. package javax chuyển qua jakarta (jms, annotation, persistence, mail, activation v.v..)
2. httpclient chuyển qua httpclient5. Phần này nếu cần thì phải viết lại mấy cái OauthRestTemplateFactory (dùng client certificate, Kerberos cache v.v.. để authenticate)
3. Nếu có activemq thì include activemq-broker, exclude activemq-client vì thằng này dùng javax package. Thêm activemq-client-jakarta package
5. Nếu có ibmq đổi qua vesion mới (vd 2.3.4 qua 3.0.6) và update import package như bình thường
6. Viết lại Security Config (dùng SecurityFilterChain, không extends WebSecurityConfigureAdapter được nữa )
7. Mấy dependency đặc biệt như jetty-webapp hay jetty-servlet thì dùng jetty-ee10-webapp/jetty-ee10-servlet
8. Nếu dùng wiremock-jre8 thì đổi qua wiremock-standalone
9. Nếu dùng liquibase thì phần rollback trước kia sẽ dùng được modifySql attribute, version mới không support nên cần comment hết các phần này (không sửa vì nếu sửa thì checksum thay đổi)
10. Cucumber: mấy URL cần phải match chính xác, vì dụ Controller có mapping là "/abc" thì bên Cucumber phải gọi "/abc", gọi "/abc/" là không chạy. 1 cái nữa là "jdbcClient" là 1 bean name trong Cucumber, nên nếu bạn có class JdbcClient bên test thì 1 là đổi tên class, vd CucumberJdbcClient, 2 là thêm tên vd Component("testClientJdbc") và dùng Qualifier("testClientJdbc") trong các StepDefinition class
11. Nếu dùng Oracle thì dialect là OracleDialect, không còn là Oracle12cDialect
12. slf4j-slf4j2-impl conflict vs slf-to-slf4j: Nếu có conflict thì exclude spring-boot-starter-log4j2
13. h2 database: nếu bạn chưa biết thì h2 database version 2.x trở ra cần database mode. Nếu không thì nó không hiểu được các syntax dành riêng cho database đấy. Ví dụ mình dùng Oracle và cần dùng mấy function như sysdate, systimestamp thì jdbc url phải có dạng jdbc:h2:mem~/db;MODE=Oracle. Tương tự nếu bạn dùng mấy keyword trong h2 làm column name (vd value) thì phải add thêm vào jdbc url, jdbc:h2:mem~/db;NON_KEYWORDS=value;MODE=Oracle
14. Vẫn h2 database, trước đây NUMBER được map qua DECFLOAT, hình như precision 40, scale 10. Qua SpringBoot 3, version mới map qua Number, Precision 100000, scale 0. Thành ra mặc định 1.56 trong SpringBoot2 lúc load vào h2 thì là 1.56, còn qua SpringBoot3 là 2. Lúc này phải add precision với scale nữa, vd NUMBER(40, 15). Ngoài ra nếu compare by String thì cẩn thận nhiều lúc SpringBoot 2 return 1.74, SpringBoot 3 return 1.740 => không match, sửa lại expected data hay sửa comparison thì tuỳ bạn
15. JSONObject: JSONObject trong springboot 2 là vesion 2000, trong springboot 3 là 2022. Ở version cũ, nó vẫn cố hiểu syntax {"name"="abc"}, nhưng qua version 2022, nó sẽ là lỗi, Object đúng phải là {"name":"abc"}. (Bạn đọc source code sẽ thấy)
16. FileUpload: CommonMultiPartResolver bị removed, đổi qua StandardServletMultipartResolver
17. ActiveMQAutoConfiguration (Trường hợp ngoại lệ), mình upgrade lên 3.0 thì thiếu nhưng lên 3.2 thì lại có dependency.
18. Hibernate Envers: Nếu dùng thì value của REV_INFO phải update thật lớn, ít nhất bằng tổng sổ row của các table dùng Hibernate Enver + 51. Nếu không sẽ dính negative number Exception.

Còn lại nếu phải duy trì legacy code thì thêm các library legacy tuỳ chọn (vd mình cần spring-remoting)

Source các link tham khảo nằm trong máy cty lười copy ra, bạn đụng đâu google đấy là được.

Tạm thời nhớ thế :LOL:
 
Nói chung là bạn muốn nâng version spring boot cho application java để tương thích với mongodb thì cứ nâng thôi, miễn sao kiểm tra code xem có bị thiếu lib nào không? Vì bản mới hay remove đi những lib cũ, test tủng các thứ oke thì lên, thế thôi

via theNEXTvoz for iPhone
 
Mình đang hiểu bạn đang dùng spring-boot-starter-data-mongodb và cái này đang ăn theo spring boot 2.2.1 release đúng không?
Bạn có thể thử bằng cách exclude mongodb-driver và add mongodb-driver 4.7 thử xem
Để exclude mongodb-driver thì có thể làm tương tự như này
 
Mình đang hiểu bạn đang dùng spring-boot-starter-data-mongodb và cái này đang ăn theo spring boot 2.2.1 release đúng không?
Bạn có thể thử bằng cách exclude mongodb-driver và add mongodb-driver 4.7 thử xem
Ko đc đâu fen, spring data nó tích hợp sâu vào lib lắm, phải update thằng spring data
 
Nếu học mới java nên học thẳng mới nhất không hay học java 8 maintain dự án cũ
Sự khác biệt nhất của java theo mình là từ version 7 lên 8.
Nên tốt nhất bạn nên học java 8 để biết 4 big feature trong java là gì
còn java 11, 17, hay 20 cũng ko có nhiều thay đổi mấy đâu, java 8 là đủ dùng rồi
 
Từ spring 2 qua spring 3 nó đổi 1 loạt các dependencies và phải đi chung với nhau. Không dễ mà override dependencies version là xong đâu. Và việc override dependencies trực tiếp là bad practice vì là manual work, nên dùng theo package của spring boot parent starter để việc nâng cấp dependencies nhẹ nhàng hơn.
 
Mình tìm được cái này bạn thử thêm xem sao
mình đọc source thấy Spring Boot 2.2.1 release đang dùng mongodb.version là 3.11.2. Bạn thử customize lại thành version bạn muốn bằng cách set chỗ properties ấy, rồi check dependencies tree thử xem đã nhận đúng dependency version chưa
 
Sự khác biệt nhất của java theo mình là từ version 7 lên 8.
Nên tốt nhất bạn nên học java 8 để biết 4 big feature trong java là gì
còn java 11, 17, hay 20 cũng ko có nhiều thay đổi mấy đâu, java 8 là đủ dùng rồi
Java có nhiều job không bạn thấy các anh khuyên nên học C#, Go, Node, Python kêu Java cũ rồi với không được develop mạnh nữa học chỉ làm maintain
 
Java rất nhiều job nhé, tuy nhiên mình thấy đối với fresher/sinh viên mới ra trường thì cơ hội việc làm ko đến từ strong kỹ thuật, mà là ngoại ngữ phải pro thì mới có cơ hội tạo ra sự khác biệt.
Mình thì ko vote mấy cái common như C#, Python, Nodejs lắm. Mình thấy hiện tại salesforce đang rất có tương lại. Bạn có thể cân nhắc theo con đường này
Có tiếng Anh + vài cái certificate về salesforce thì nhiều công ty tuyển lắm
 
Back
Top