{"id":88880,"date":"2025-07-01T22:37:14","date_gmt":"2025-07-01T15:37:14","guid":{"rendered":"https:\/\/itviec.com\/blog\/?p=88880"},"modified":"2025-07-01T22:37:17","modified_gmt":"2025-07-01T15:37:17","slug":"spring-initializr-la-gi","status":"publish","type":"post","link":"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/","title":{"rendered":"Spring Initializr l\u00e0 g\u00ec: C\u00e1ch kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n Spring Boot nhanh ch\u00f3ng"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">N\u1ed9i dung b\u00e0i vi\u1ebft<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/#Spring_Initializr_la_gi\" >Spring Initializr l\u00e0 g\u00ec?&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/#Vay_Spring_Initializr_hoat_dong_nhu_the_nao\" >V\u1eady Spring Initializr ho\u1ea1t \u0111\u1ed9ng nh\u01b0 th\u1ebf n\u00e0o?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/#Tai_sao_nen_su_dung_Spring_Initialzr\" >T\u1ea1i sao n\u00ean s\u1eed d\u1ee5ng Spring Initialzr?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/#Huong_dan_khoi_tao_du_an_Spring_Boot_voi_Spring_Initializr\" >H\u01b0\u1edbng d\u1eabn kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n Spring Boot v\u1edbi Spring Initializr<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/#Cac_tinh_nang_va_tuy_chon_khac_cua_Spring_Initializr\" >C\u00e1c t\u00ednh n\u0103ng v\u00e0 t\u00f9y ch\u1ecdn kh\u00e1c c\u1ee7a Spring Initializr<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/#Vi_du_xay_dung_ung_dung_REST_API_don_gian\" >V\u00ed d\u1ee5 x\u00e2y d\u1ef1ng \u1ee9ng d\u1ee5ng REST API \u0111\u01a1n gi\u1ea3n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/#Cac_cau_hoi_thuong_gap_ve_Spring_Initializr\" >C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 Spring Initializr<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/#Tong_ket\" >T\u1ed5ng k\u1ebft<\/a><\/li><\/ul><\/nav><\/div>\n\n<p><strong><em>Kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n Spring Boot m\u1edbi \u0111\u00f4i khi khi\u1ebfn b\u1ea1n m\u1ea5t th\u1eddi gian v\u1edbi c\u00e1c thi\u1ebft l\u1eadp ban \u0111\u1ea7u? Spring Initializr ch\u00ednh l\u00e0 gi\u1ea3i ph\u00e1p! C\u00f4ng c\u1ee5 m\u1ea1nh m\u1ebd \u0111\u01b0\u1ee3c cung c\u1ea5p b\u1edfi \u0111\u1ed9i ng\u0169 Spring gi\u00fap b\u1ea1n t\u1ea1o b\u1ed9 khung d\u1ef1 \u00e1n ch\u1ec9 trong v\u00e0i c\u00fa nh\u1ea5p chu\u1ed9t, v\u1edbi \u0111\u1ea7y \u0111\u1ee7 c\u1ea5u h\u00ecnh v\u00e0 th\u01b0 vi\u1ec7n c\u1ea7n thi\u1ebft. C\u00f9ng kh\u00e1m ph\u00e1 b\u00ed quy\u1ebft v\u1edbi c\u00f4ng c\u1ee5 h\u1eefu \u00edch n\u00e0y \u0111\u1ec3 kh\u1edfi \u0111\u1ed9ng d\u1ef1 \u00e1n nhanh ch\u00f3ng v\u00e0 chuy\u00ean nghi\u1ec7p &#8220;trong nh\u00e1y m\u1eaft&#8221; nh\u00e9!<\/em><\/strong><\/p>\n\n\n\n<p>\u0110\u1ecdc b\u00e0i vi\u1ebft n\u00e0y \u0111\u1ec3 hi\u1ec3u th\u00eam v\u1ec1:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Spring Initializr l\u00e0 g\u00ec?&nbsp;<\/li>\n\n\n\n<li>T\u1ea1i sao n\u00ean s\u1eed d\u1ee5ng Spring Initializr?<\/li>\n\n\n\n<li>H\u01b0\u1edbng d\u1eabn s\u1eed d\u1ee5ng Spring Initializr<\/li>\n\n\n\n<li>C\u00e1c t\u00ednh n\u0103ng v\u00e0 t\u00f9y ch\u1ecdn kh\u00e1c&nbsp;<\/li>\n\n\n\n<li>V\u00ed d\u1ee5 th\u1ef1c t\u1ebf&nbsp;<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-spring-initializr-la-gi-nbsp\"><span class=\"ez-toc-section\" id=\"Spring_Initializr_la_gi\"><\/span><strong>Spring Initializr l\u00e0 g\u00ec?&nbsp;<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><strong>Spring Initializr<\/strong> l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 tr\u1ef1c tuy\u1ebfn ti\u1ec7n l\u1ee3i, \u0111\u01b0\u1ee3c cung c\u1ea5p b\u1edfi ch\u00ednh \u0111\u1ed9i ng\u0169 ph\u00e1t tri\u1ec3n Spring (tr\u01b0\u1edbc \u0111\u00e2y l\u00e0 Pivotal, nay thu\u1ed9c VMware). B\u1ea1n c\u00f3 th\u1ec3 d\u1ec5 d\u00e0ng truy c\u1eadp c\u00f4ng c\u1ee5 n\u00e0y qua giao di\u1ec7n web t\u1ea1i \u0111\u1ecba ch\u1ec9 quen thu\u1ed9c <a href=\"https:\/\/start.spring.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">start.spring.io<\/a>. B\u00ean c\u1ea1nh giao di\u1ec7n web tr\u1ef1c quan, Spring Initializr c\u00f2n cung c\u1ea5p m\u1ed9t API cho ph\u00e9p c\u00e1c c\u00f4ng c\u1ee5 kh\u00e1c (nh\u01b0 c\u00e1c IDE) t\u00edch h\u1ee3p v\u00e0 s\u1eed d\u1ee5ng ch\u1ee9c n\u0103ng c\u1ee7a n\u00f3.<\/p>\n\n\n\n<p>M\u1ee5c \u0111\u00edch c\u1ed1t l\u00f5i c\u1ee7a Spring Initializr v\u00f4 c\u00f9ng r\u00f5 r\u00e0ng: <strong>t\u1ef1 \u0111\u1ed9ng h\u00f3a v\u00e0 \u0111\u01a1n gi\u1ea3n h\u00f3a vi\u1ec7c t\u1ea1o ra c\u1ea5u tr\u00fac c\u01a1 b\u1ea3n ban \u0111\u1ea7u (boilerplate code) cho c\u00e1c d\u1ef1 \u00e1n <a href=\"https:\/\/itviec.com\/blog\/spring-boot-la-gi\/\" target=\"_blank\" rel=\"noreferrer noopener\">Spring Boot<\/a>.<\/strong> Thay v\u00ec ph\u1ea3i t\u1ef1 tay t\u1ea1o th\u01b0 m\u1ee5c, c\u1ea5u h\u00ecnh file build, v\u00e0 th\u00eam t\u1eebng dependency m\u1ed9t c\u00e1ch th\u1ee7 c\u00f4ng, Spring Initializr s\u1ebd l\u00e0m t\u1ea5t c\u1ea3 nh\u1eefng vi\u1ec7c \u0111\u00f3 cho b\u1ea1n ch\u1ec9 trong v\u00e0i thao t\u00e1c.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u0110\u1ecdc th\u00eam: <strong><a href=\"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/\" target=\"_blank\" rel=\"noreferrer noopener\">Spring l\u00e0 g\u00ec? Spring Framework l\u00e0 g\u00ec?<\/a><\/strong><\/em><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-v\u1eady-spring-initializr-ho\u1ea1t-d\u1ed9ng-nh\u01b0-th\u1ebf-nao\"><span class=\"ez-toc-section\" id=\"Vay_Spring_Initializr_hoat_dong_nhu_the_nao\"><\/span><strong>V\u1eady Spring Initializr ho\u1ea1t \u0111\u1ed9ng nh\u01b0 th\u1ebf n\u00e0o?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Spring Initializr \u0111\u00f3ng vai tr\u00f2 nh\u01b0 m\u1ed9t tr\u1ee3 l\u00fd kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n th\u00f4ng minh, gi\u00fap b\u1ea1n b\u1ecf qua nh\u1eefng b\u01b0\u1edbc thi\u1ebft l\u1eadp ban \u0111\u1ea7u t\u1ebb nh\u1ea1t v\u00e0 t\u1eadp trung ngay v\u00e0o vi\u1ec7c ph\u00e1t tri\u1ec3n c\u00e1c t\u00ednh n\u0103ng quan tr\u1ecdng cho \u1ee9ng d\u1ee5ng c\u1ee7a m\u00ecnh.<\/p>\n\n\n\n<p>Nguy\u00ean t\u1eafc ho\u1ea1t \u0111\u1ed9ng c\u1ee7a Spring Initializr kh\u00e1 tr\u1ef1c quan. M\u1ed9t quy tr\u00ecnh c\u01a1 b\u1ea3n \u0111\u1ec3 s\u1eed d\u1ee5ng Spring Initializr ch\u1ec9 g\u1ed3m 3 b\u01b0\u1edbc:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-b\u01b0\u1edbc-1-l\u1ef1a-ch\u1ecdn-c\u1ea5u-hinh-c\u01a1-b\u1ea3n\"><strong>B\u01b0\u1edbc 1: L\u1ef1a ch\u1ecdn c\u1ea5u h\u00ecnh c\u01a1 b\u1ea3n:<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Spring Initializr cho ph\u00e9p b\u1ea1n t\u00f9y ch\u1ec9nh c\u00e1c y\u1ebfu t\u1ed1 n\u1ec1n t\u1ea3ng c\u1ee7a d\u1ef1 \u00e1n nh\u01b0:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>C\u00f4ng c\u1ee5 x\u00e2y d\u1ef1ng (Build Tool):<\/strong> Maven ho\u1eb7c Gradle &#8211; hai c\u00f4ng c\u1ee5 qu\u1ea3n l\u00fd d\u1ef1 \u00e1n v\u00e0 build ph\u1ed5 bi\u1ebfn nh\u1ea5t trong th\u1ebf gi\u1edbi Java.<\/li>\n\n\n\n<li><strong>Ng\u00f4n ng\u1eef l\u1eadp tr\u00ecnh:<\/strong> Java (m\u1eb7c \u0111\u1ecbnh v\u00e0 ph\u1ed5 bi\u1ebfn nh\u1ea5t), Kotlin, ho\u1eb7c Groovy.<\/li>\n\n\n\n<li><strong>Phi\u00ean b\u1ea3n Spring Boot:<\/strong> B\u1ea1n c\u00f3 th\u1ec3 ch\u1ecdn phi\u00ean b\u1ea3n \u1ed5n \u0111\u1ecbnh m\u1edbi nh\u1ea5t, ho\u1eb7c c\u00e1c phi\u00ean b\u1ea3n c\u1ee5 th\u1ec3 kh\u00e1c n\u1ebfu d\u1ef1 \u00e1n y\u00eau c\u1ea7u.<\/li>\n\n\n\n<li><strong>Th\u00f4ng tin Metadata c\u1ee7a d\u1ef1 \u00e1n:<\/strong> Nh\u01b0 Group, Artifact, Name, Description, Package name, ki\u1ec3u \u0111\u00f3ng g\u00f3i (Jar ho\u1eb7c War) v\u00e0 phi\u00ean b\u1ea3n Java.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-b\u01b0\u1edbc-2-tich-h\u1ee3p-dependencies-starters\"><strong>B\u01b0\u1edbc 2: T\u00edch h\u1ee3p Dependencies (Starters):<\/strong>&nbsp;<\/h3>\n\n\n\n<p>\u0110\u00e2y l\u00e0 m\u1ed9t trong nh\u1eefng t\u00ednh n\u0103ng m\u1ea1nh m\u1ebd nh\u1ea5t. Spring Initializr cung c\u1ea5p m\u1ed9t danh s\u00e1ch phong ph\u00fa c\u00e1c &#8220;Starters&#8221;. Spring Boot Starters l\u00e0 c\u00e1c b\u1ed9 m\u00f4 t\u1ea3 dependency ti\u1ec7n l\u1ee3i m\u00e0 b\u1ea1n c\u00f3 th\u1ec3 \u0111\u01b0a v\u00e0o \u1ee9ng d\u1ee5ng c\u1ee7a m\u00ecnh.&nbsp;<\/p>\n\n\n\n<p>V\u00ed d\u1ee5:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>N\u1ebfu b\u1ea1n mu\u1ed1n x\u00e2y d\u1ef1ng m\u1ed9t \u1ee9ng d\u1ee5ng web, b\u1ea1n ch\u1ec9 c\u1ea7n ch\u1ecdn &#8220;Spring Web&#8221;.&nbsp;<\/li>\n\n\n\n<li>Mu\u1ed1n l\u00e0m vi\u1ec7c v\u1edbi c\u01a1 s\u1edf d\u1eef li\u1ec7u? C\u00f3 &#8220;Spring Data JPA&#8221;.&nbsp;<\/li>\n\n\n\n<li>C\u1ea7n b\u1ea3o m\u1eadt? &#8220;Spring Security&#8221; s\u1eb5n s\u00e0ng.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>B\u1ea1n ch\u1ec9 c\u1ea7n ch\u1ecdn nh\u1eefng g\u00ec m\u00ecnh c\u1ea7n, Spring Initializr s\u1ebd t\u1ef1 \u0111\u1ed9ng th\u00eam c\u00e1c dependency t\u01b0\u01a1ng \u1ee9ng v\u00e0o file c\u1ea5u h\u00ecnh build c\u1ee7a b\u1ea1n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-b\u01b0\u1edbc-3-t\u1ea1o-va-t\u1ea3i-xu\u1ed1ng-d\u1ef1-an\"><strong>B\u01b0\u1edbc 3: T\u1ea1o v\u00e0 T\u1ea3i xu\u1ed1ng D\u1ef1 \u00e1n:<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Sau khi b\u1ea1n \u0111\u00e3 ho\u00e0n t\u1ea5t c\u00e1c l\u1ef1a ch\u1ecdn, ch\u1ec9 c\u1ea7n nh\u1ea5n n\u00fat &#8220;GENERATE&#8221;. Spring Initializr s\u1ebd ngay l\u1eadp t\u1ee9c t\u1ea1o ra m\u1ed9t file n\u00e9n \u0111\u1ecbnh d\u1ea1ng .zip. B\u00ean trong file n\u00e0y l\u00e0 to\u00e0n b\u1ed9 c\u1ea5u tr\u00fac d\u1ef1 \u00e1n Spring Boot \u0111\u00e3 \u0111\u01b0\u1ee3c thi\u1ebft l\u1eadp chu\u1ea9n, s\u1eb5n s\u00e0ng \u0111\u1ec3 b\u1ea1n gi\u1ea3i n\u00e9n v\u00e0 nh\u1eadp (import) v\u00e0o m\u00f4i tr\u01b0\u1eddng ph\u00e1t tri\u1ec3n t\u00edch h\u1ee3p (IDE) y\u00eau th\u00edch c\u1ee7a m\u00ecnh nh\u01b0 IntelliJ IDEA, Eclipse, hay Visual Studio Code \u0111\u1ec3 b\u1eaft \u0111\u1ea7u vi\u1ebft code.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-t\u1ea1i-sao-nen-s\u1eed-d\u1ee5ng-spring-initialzr\"><span class=\"ez-toc-section\" id=\"Tai_sao_nen_su_dung_Spring_Initialzr\"><\/span><strong>T\u1ea1i sao n\u00ean s\u1eed d\u1ee5ng Spring Initialzr?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Vi\u1ec7c s\u1eed d\u1ee5ng Spring Initializr kh\u00f4ng ch\u1ec9 l\u00e0 m\u1ed9t l\u1ef1a ch\u1ecdn ti\u1ec7n l\u1ee3i m\u00e0 c\u00f2n mang l\u1ea1i nhi\u1ec1u \u01b0u \u0111i\u1ec3m v\u01b0\u1ee3t tr\u1ed9i, gi\u00fap b\u1ea1n t\u1eadp trung v\u00e0o vi\u1ec7c ph\u00e1t tri\u1ec3n logic nghi\u1ec7p v\u1ee5 thay v\u00ec loay hoay v\u1edbi c\u00e1c b\u01b0\u1edbc thi\u1ebft l\u1eadp ban \u0111\u1ea7u. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 nh\u1eefng l\u00fd do ch\u00ednh khi\u1ebfn b\u1ea1n n\u00ean &#8220;k\u1ebft th\u00e2n&#8221; v\u1edbi c\u00f4ng c\u1ee5 n\u00e0y:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-ti\u1ebft-ki\u1ec7m-th\u1eddi-gian-amp-tang-hi\u1ec7u-su\u1ea5t-v\u01b0\u1ee3t-tr\u1ed9i\"><strong>Ti\u1ebft ki\u1ec7m th\u1eddi gian &amp; t\u0103ng hi\u1ec7u su\u1ea5t v\u01b0\u1ee3t tr\u1ed9i<\/strong><\/h3>\n\n\n\n<p>\u0110\u00e2y c\u00f3 l\u1ebd l\u00e0 l\u1ee3i \u00edch r\u00f5 r\u00e0ng nh\u1ea5t. Thay v\u00ec ph\u1ea3i d\u00e0nh h\u00e0ng gi\u1edd (ho\u1eb7c h\u01a1n) \u0111\u1ec3 t\u1ef1 tay t\u1ea1o c\u1ea5u tr\u00fac th\u01b0 m\u1ee5c, vi\u1ebft file <code>pom.xml<\/code> hay <code>build.gradle<\/code> t\u1eeb \u0111\u1ea7u, th\u00eam t\u1eebng dependency v\u00e0 \u0111\u1ea3m b\u1ea3o ch\u00fang t\u01b0\u01a1ng th\u00edch, Spring Initializr cho ph\u00e9p b\u1ea1n ho\u00e0n th\u00e0nh t\u1ea5t c\u1ea3 nh\u1eefng vi\u1ec7c \u0111\u00f3 <strong>ch\u1ec9 trong v\u00e0i c\u00fa nh\u1ea5p chu\u1ed9t<\/strong>.<\/p>\n\n\n\n<p>\u0110i\u1ec1u n\u00e0y gi\u00fap b\u1ea1n kh\u1edfi \u0111\u1ed9ng d\u1ef1 \u00e1n g\u1ea7n nh\u01b0 t\u1ee9c th\u00ec, gi\u1ea3i ph\u00f3ng th\u1eddi gian qu\u00fd b\u00e1u \u0111\u1ec3 t\u1eadp trung v\u00e0o vi\u1ec7c s\u00e1ng t\u1ea1o v\u00e0 gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-chu\u1ea9n-hoa-amp-ap-d\u1ee5ng-best-practices\"><strong>Chu\u1ea9n h\u00f3a &amp; \u00e1p d\u1ee5ng best practices<\/strong><\/h3>\n\n\n\n<p>Spring Initializr t\u1ea1o ra m\u1ed9t c\u1ea5u tr\u00fac d\u1ef1 \u00e1n theo chu\u1ea9n chung \u0111\u01b0\u1ee3c c\u1ed9ng \u0111\u1ed3ng Spring c\u00f4ng nh\u1eadn v\u00e0 khuy\u1ebfn ngh\u1ecb. \u0110i\u1ec1u n\u00e0y kh\u00f4ng ch\u1ec9 gi\u00fap d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n tr\u1edf n\u00ean chuy\u00ean nghi\u1ec7p, d\u1ec5 hi\u1ec3u, d\u1ec5 b\u1ea3o tr\u00ec m\u00e0 c\u00f2n c\u1ef1c k\u1ef3 quan tr\u1ecdng khi l\u00e0m vi\u1ec7c nh\u00f3m. M\u1ecdi ng\u01b0\u1eddi trong team s\u1ebd nhanh ch\u00f3ng l\u00e0m quen v\u00e0 \u0111\u00f3ng g\u00f3p v\u00e0o d\u1ef1 \u00e1n m\u00e0 kh\u00f4ng m\u1ea5t th\u1eddi gian t\u00ecm hi\u1ec3u c\u1ea5u tr\u00fac ri\u00eang l\u1ebb.<\/p>\n\n\n\n<p>H\u01a1n n\u1eefa, c\u00e1c c\u1ea5u h\u00ecnh build (Maven\/Gradle) \u0111\u01b0\u1ee3c t\u1ea1o ra c\u0169ng tu\u00e2n theo c\u00e1c th\u1ef1c h\u00e0nh t\u1ed1t nh\u1ea5t, \u0111\u1ea3m b\u1ea3o d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng m\u1ed9t c\u00e1ch \u1ed5n \u0111\u1ecbnh v\u00e0 hi\u1ec7u qu\u1ea3.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-qu\u1ea3n-ly-dependencies-th\u01b0-vi\u1ec7n-ph\u1ee5-thu\u1ed9c-d\u1ec5-dang-va-an-toan\"><strong>Qu\u1ea3n l\u00fd Dependencies (Th\u01b0 vi\u1ec7n ph\u1ee5 thu\u1ed9c) d\u1ec5 d\u00e0ng v\u00e0 an to\u00e0n<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Starters \u0111\u01b0\u1ee3c qu\u1ea3n l\u00fd:<\/strong> Spring Initializr cung c\u1ea5p danh s\u00e1ch c\u00e1c &#8220;Starters&#8221; (v\u00ed d\u1ee5: <code>spring-boot-starter-web<\/code>, <code>spring-boot-starter-data-jpa<\/code>). \u0110\u00e2y l\u00e0 c\u00e1c g\u00f3i dependency \u0111\u01b0\u1ee3c qu\u1ea3n l\u00fd b\u1edfi ch\u00ednh Spring Boot, \u0111\u1ea3m b\u1ea3o t\u00ednh t\u01b0\u01a1ng th\u00edch gi\u1eefa c\u00e1c th\u01b0 vi\u1ec7n v\u00e0 phi\u00ean b\u1ea3n, gi\u00fap b\u1ea1n tr\u00e1nh \u0111\u01b0\u1ee3c &#8220;dependency hell&#8221; (\u0111\u1ecba ng\u1ee5c t\u01b0\u01a1ng th\u00edch th\u01b0 vi\u1ec7n).<\/li>\n\n\n\n<li><strong>T\u00ecm ki\u1ebfm v\u00e0 th\u00eam th\u01b0 vi\u1ec7n tr\u1ef1c quan:<\/strong> B\u1ea1n c\u00f3 th\u1ec3 d\u1ec5 d\u00e0ng t\u00ecm ki\u1ebfm v\u00e0 th\u00eam c\u00e1c th\u01b0 vi\u1ec7n ph\u1ed5 bi\u1ebfn nh\u01b0 Spring Web, Spring Data JPA, Spring Security, Lombok, Thymeleaf, v\u00e0 nhi\u1ec1u h\u01a1n n\u1eefa m\u00e0 kh\u00f4ng c\u1ea7n nh\u1edb ch\u00ednh x\u00e1c Group ID, Artifact ID hay phi\u00ean b\u1ea3n.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-gi\u1ea3m-thi\u1ec3u-dang-k\u1ec3-boilerplate-code-ma-m\u1eabu-l\u1eb7p-di-l\u1eb7p-l\u1ea1i\"><strong>Gi\u1ea3m thi\u1ec3u \u0111\u00e1ng k\u1ec3 Boilerplate Code (M\u00e3 m\u1eabu l\u1eb7p \u0111i l\u1eb7p l\u1ea1i)<\/strong><\/h3>\n\n\n\n<p>M\u1ed9t trong nh\u1eefng m\u1ee5c ti\u00eau c\u1ee7a Spring Boot l\u00e0 gi\u1ea3m thi\u1ec3u c\u1ea5u h\u00ecnh. Spring Initializr \u0111\u01b0a \u0111i\u1ec1u n\u00e0y l\u00ean m\u1ed9t t\u1ea7m cao m\u1edbi b\u1eb1ng c\u00e1ch lo\u1ea1i b\u1ecf ho\u00e0n to\u00e0n vi\u1ec7c ph\u1ea3i vi\u1ebft c\u00e1c m\u00e3 c\u1ea5u h\u00ecnh kh\u1edfi t\u1ea1o c\u01a1 b\u1ea3n, c\u00e1c class <code>@Configuration<\/code> t\u1ed1i thi\u1ec3u hay c\u00e1c thi\u1ebft l\u1eadp ban \u0111\u1ea7u cho build tool. B\u1ea1n nh\u1eadn \u0111\u01b0\u1ee3c m\u1ed9t d\u1ef1 \u00e1n &#8220;s\u1ea1ch&#8221;, s\u1eb5n s\u00e0ng \u0111\u1ec3 ph\u00e1t tri\u1ec3n t\u00ednh n\u0103ng.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-luon-c\u1eadp-nh\u1eadt-v\u1edbi-phien-b\u1ea3n-m\u1edbi-nh\u1ea5t-va-\u1ed5n-d\u1ecbnh-nh\u1ea5t\"><strong>Lu\u00f4n c\u1eadp nh\u1eadt v\u1edbi phi\u00ean b\u1ea3n m\u1edbi nh\u1ea5t v\u00e0 \u1ed5n \u0111\u1ecbnh nh\u1ea5t:<\/strong><\/h3>\n\n\n\n<p>C\u00f4ng c\u1ee5 n\u00e0y lu\u00f4n cung c\u1ea5p cho b\u1ea1n t\u00f9y ch\u1ecdn s\u1eed d\u1ee5ng c\u00e1c phi\u00ean b\u1ea3n Spring Boot m\u1edbi nh\u1ea5t (bao g\u1ed3m c\u1ea3 c\u00e1c b\u1ea3n milestone ho\u1eb7c snapshot n\u1ebfu b\u1ea1n mu\u1ed1n th\u1eed nghi\u1ec7m). \u0110\u1ed3ng th\u1eddi, c\u00e1c dependencies \u0111i k\u00e8m c\u0169ng th\u01b0\u1eddng l\u00e0 nh\u1eefng phi\u00ean b\u1ea3n \u1ed5n \u0111\u1ecbnh v\u00e0 t\u01b0\u01a1ng th\u00edch nh\u1ea5t \u0111\u01b0\u1ee3c khuy\u1ebfn ngh\u1ecb b\u1edfi \u0111\u1ed9i ng\u0169 Spring. T\u00ednh \u0111\u1ebfn th\u1eddi \u0111i\u1ec3m hi\u1ec7n t\u1ea1i (th\u00e1ng 5 n\u0103m 2025), vi\u1ec7c n\u00e0y \u0111\u1ea3m b\u1ea3o b\u1ea1n lu\u00f4n ti\u1ebfp c\u1eadn \u0111\u01b0\u1ee3c nh\u1eefng t\u00ednh n\u0103ng v\u00e0 c\u1ea3i ti\u1ebfn m\u1edbi nh\u1ea5t.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-d\u1ec5-dang-tich-h\u1ee3p-v\u1edbi-cac-ide-ph\u1ed5-bi\u1ebfn\"><strong>D\u1ec5 d\u00e0ng t\u00edch h\u1ee3p v\u1edbi c\u00e1c IDE ph\u1ed5 bi\u1ebfn<\/strong><\/h3>\n\n\n\n<p>D\u1ef1 \u00e1n \u0111\u01b0\u1ee3c t\u1ea1o ra t\u1eeb Spring Initializr (d\u01b0\u1edbi d\u1ea1ng file .zip) c\u00f3 th\u1ec3 d\u1ec5 d\u00e0ng \u0111\u01b0\u1ee3c import v\u00e0 l\u00e0m vi\u1ec7c tr\u01a1n tru tr\u00ean h\u1ea7u h\u1ebft c\u00e1c M\u00f4i tr\u01b0\u1eddng Ph\u00e1t tri\u1ec3n T\u00edch h\u1ee3p (IDE) ph\u1ed5 bi\u1ebfn hi\u1ec7n nay nh\u01b0 IntelliJ IDEA, Eclipse (\u0111\u1eb7c bi\u1ec7t v\u1edbi Spring Tools Suite &#8211; STS), hay Visual Studio Code (v\u1edbi c\u00e1c extension h\u1ed7 tr\u1ee3 Java v\u00e0 Spring Boot). Qu\u00e1 tr\u00ecnh chuy\u1ec3n t\u1eeb web v\u1ec1 IDE di\u1ec5n ra m\u1ed9t c\u00e1ch li\u1ec1n m\u1ea1ch.<\/p>\n\n\n\n<p>N\u00f3i c\u00e1ch kh\u00e1c, Spring Initializr kh\u00f4ng ch\u1ec9 l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 t\u1ea1o d\u1ef1 \u00e1n, m\u00e0 c\u00f2n l\u00e0 m\u1ed9t ng\u01b0\u1eddi b\u1ea1n \u0111\u1ed3ng h\u00e0nh gi\u00fap b\u1ea1n l\u00e0m vi\u1ec7c th\u00f4ng minh h\u01a1n, nhanh h\u01a1n v\u00e0 tu\u00e2n th\u1ee7 c\u00e1c ti\u00eau chu\u1ea9n t\u1ed1t nh\u1ea5t trong h\u1ec7 sinh th\u00e1i Spring Boot.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-h\u01b0\u1edbng-d\u1eabn-kh\u1edfi-t\u1ea1o-d\u1ef1-an-spring-boot-v\u1edbi-spring-initializr\"><span class=\"ez-toc-section\" id=\"Huong_dan_khoi_tao_du_an_Spring_Boot_voi_Spring_Initializr\"><\/span><strong>H\u01b0\u1edbng d\u1eabn kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n Spring Boot v\u1edbi Spring Initializr<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Spring Initializr cung c\u1ea5p nhi\u1ec1u c\u00e1ch linh ho\u1ea1t \u0111\u1ec3 b\u1ea1n kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n Spring Boot. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 h\u01b0\u1edbng d\u1eabn chi ti\u1ebft cho c\u00e1c ph\u01b0\u01a1ng ph\u00e1p ph\u1ed5 bi\u1ebfn nh\u1ea5t:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-s\u1eed-d\u1ee5ng-giao-di\u1ec7n-web\"><strong>S\u1eed d\u1ee5ng giao di\u1ec7n Web<\/strong><\/h3>\n\n\n\n<p>\u0110\u00e2y l\u00e0 c\u00e1ch ti\u1ebfp c\u1eadn tr\u1ef1c quan v\u00e0 ph\u1ed5 bi\u1ebfn nh\u1ea5t, \u0111\u1eb7c bi\u1ec7t ph\u00f9 h\u1ee3p cho ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u.<\/p>\n\n\n\n<p><strong>B\u01b0\u1edbc 1: Truy c\u1eadp<\/strong>&nbsp;<\/p>\n\n\n\n<p>M\u1edf tr\u00ecnh duy\u1ec7t web y\u00eau th\u00edch c\u1ee7a b\u1ea1n v\u00e0 truy c\u1eadp v\u00e0o \u0111\u1ecba ch\u1ec9 ch\u00ednh th\u1ee9c:<a href=\"https:\/\/start.spring.io\/\" target=\"_blank\" rel=\"noreferrer noopener\"> https:\/\/start.spring.io\/<\/a><\/p>\n\n\n\n<p><strong>B\u01b0\u1edbc 2: Kh\u00e1m ph\u00e1 v\u00e0 t\u00f9y ch\u1ec9nh c\u00e1c t\u00f9y ch\u1ecdn tr\u00ean giao di\u1ec7n<\/strong>&nbsp;<\/p>\n\n\n\n<p>Giao di\u1ec7n c\u1ee7a start.spring.io r\u1ea5t r\u00f5 r\u00e0ng. B\u00ean tr\u00e1i l\u00e0 c\u00e1c t\u00f9y ch\u1ecdn c\u1ea5u h\u00ecnh d\u1ef1 \u00e1n, b\u00ean ph\u1ea3i l\u00e0 n\u01a1i ch\u1ecdn dependencies.<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"283\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXck144Fpvb7f_6btFbAuR36TeRhkQSh0dLHWSj5bExvAMdS6ZZs_rZv7ieSvBja2l5xt_WZCdvu33ybvDBi_Qv3ISpmjhpG73PN-IDlEsshKgvKgBnTy8lwWx5PZ6BEhi4mlUNYdA?key=wI7C_3o_jQDYFTWr6MwGheri\"><\/p>\n\n\n\n<p><strong>Project:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Maven Project:<\/strong> S\u1eed d\u1ee5ng Apache Maven l\u00e0m c\u00f4ng c\u1ee5 qu\u1ea3n l\u00fd build v\u00e0 dependency. T\u1ea1o ra file <code>pom.xml<\/code>.<\/li>\n\n\n\n<li><strong>Gradle Project:<\/strong> S\u1eed d\u1ee5ng Gradle l\u00e0m c\u00f4ng c\u1ee5 qu\u1ea3n l\u00fd build v\u00e0 dependency. T\u1ea1o ra file <code>build.gradle<\/code> (th\u01b0\u1eddng s\u1eed d\u1ee5ng Groovy DSL ho\u1eb7c Kotlin DSL).<\/li>\n<\/ul>\n\n\n\n<p><strong>Language:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Java:<\/strong> Ng\u00f4n ng\u1eef m\u1eb7c \u0111\u1ecbnh v\u00e0 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng r\u1ed9ng r\u00e3i nh\u1ea5t.<\/li>\n\n\n\n<li><strong>Kotlin:<\/strong> M\u1ed9t ng\u00f4n ng\u1eef hi\u1ec7n \u0111\u1ea1i, ng\u1eafn g\u1ecdn t\u1eeb JetBrains, t\u01b0\u01a1ng th\u00edch ho\u00e0n to\u00e0n v\u1edbi Java.<\/li>\n\n\n\n<li><strong>Groovy:<\/strong> M\u1ed9t ng\u00f4n ng\u1eef \u0111\u1ed9ng m\u1ea1nh m\u1ebd cho n\u1ec1n t\u1ea3ng Java.<\/li>\n<\/ul>\n\n\n\n<p><strong>Spring Boot:<\/strong> Cho ph\u00e9p b\u1ea1n ch\u1ecdn phi\u00ean b\u1ea3n Spring Boot. M\u1eb7c \u0111\u1ecbnh th\u01b0\u1eddng l\u00e0 phi\u00ean b\u1ea3n \u1ed5n \u0111\u1ecbnh (stable) m\u1edbi nh\u1ea5t. B\u1ea1n c\u00f3 th\u1ec3 nh\u1ea5p v\u00e0o \u0111\u1ec3 xem v\u00e0 ch\u1ecdn c\u00e1c phi\u00ean b\u1ea3n kh\u00e1c, bao g\u1ed3m c\u1ea3 c\u00e1c b\u1ea3n M (Milestone) ho\u1eb7c SNAPSHOT n\u1ebfu mu\u1ed1n th\u1eed nghi\u1ec7m t\u00ednh n\u0103ng m\u1edbi (kh\u00f4ng khuy\u1ebfn kh\u00edch cho m\u00f4i tr\u01b0\u1eddng production).<\/p>\n\n\n\n<p><strong>Project Metadata:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Group:<\/strong> Th\u01b0\u1eddng l\u00e0 t\u00ean domain c\u1ee7a t\u1ed5 ch\u1ee9c b\u1ea1n theo th\u1ee9 t\u1ef1 \u0111\u1ea3o ng\u01b0\u1ee3c. V\u00ed d\u1ee5: n\u1ebfu domain c\u1ee7a b\u1ea1n l\u00e0 <code>mycompany.com<\/code>, Group ID s\u1ebd l\u00e0 <code>com.mycompany<\/code>. N\u1ebfu l\u00e0 d\u1ef1 \u00e1n c\u00e1 nh\u00e2n, c\u00f3 th\u1ec3 d\u00f9ng <code>com.example<\/code> ho\u1eb7c <code>io.github.yourusername<\/code>.<\/li>\n\n\n\n<li><strong>Artifact:<\/strong> T\u00ean c\u1ee7a d\u1ef1 \u00e1n ho\u1eb7c module c\u1ee7a b\u1ea1n. \u0110\u00e2y s\u1ebd l\u00e0 t\u00ean file JAR\/WAR \u0111\u01b0\u1ee3c t\u1ea1o ra (kh\u00f4ng bao g\u1ed3m phi\u00ean b\u1ea3n). V\u00ed d\u1ee5: <code>my-spring-app<\/code>, <code>customer-service<\/code>.<\/li>\n\n\n\n<li><strong>Name:<\/strong> T\u00ean hi\u1ec3n th\u1ecb c\u1ee7a d\u1ef1 \u00e1n, th\u01b0\u1eddng t\u1ef1 \u0111\u1ed9ng \u0111i\u1ec1n gi\u1ed1ng Artifact.<\/li>\n\n\n\n<li><strong>Description:<\/strong> M\u00f4 t\u1ea3 ng\u1eafn g\u1ecdn v\u1ec1 d\u1ef1 \u00e1n. V\u00ed d\u1ee5: &#8220;Demo project for Spring Boot&#8221;.<\/li>\n\n\n\n<li><strong>Package name:<\/strong> T\u00ean package g\u1ed1c cho m\u00e3 ngu\u1ed3n c\u1ee7a b\u1ea1n. Th\u01b0\u1eddng t\u1ef1 \u0111\u1ed9ng \u0111\u01b0\u1ee3c t\u1ea1o t\u1eeb <code>Group<\/code> v\u00e0 <code>Artifact<\/code>. V\u00ed d\u1ee5: <code>com.mycompany.myspringapp<\/code>.<\/li>\n<\/ul>\n\n\n\n<p><strong>Packaging:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Jar:<\/strong> \u0110\u00f3ng g\u00f3i d\u1ef1 \u00e1n th\u00e0nh m\u1ed9t file JAR th\u1ef1c thi (executable JAR) v\u1edbi embedded servlet container (v\u00ed d\u1ee5: Tomcat, Jetty, Undertow). \u0110\u00e2y l\u00e0 l\u1ef1a ch\u1ecdn ph\u1ed5 bi\u1ebfn cho microservices v\u00e0 \u1ee9ng d\u1ee5ng web hi\u1ec7n \u0111\u1ea1i.<\/li>\n\n\n\n<li><strong>War:<\/strong> \u0110\u00f3ng g\u00f3i d\u1ef1 \u00e1n th\u00e0nh file WAR (Web Application Archive) \u0111\u1ec3 tri\u1ec3n khai tr\u00ean m\u1ed9t servlet container\/application server truy\u1ec1n th\u1ed1ng (v\u00ed d\u1ee5: Tomcat, JBoss\/WildFly ri\u00eang bi\u1ec7t).<\/li>\n<\/ul>\n\n\n\n<p><strong>Java:<\/strong> Ch\u1ecdn phi\u00ean b\u1ea3n Java b\u1ea1n mu\u1ed1n s\u1eed d\u1ee5ng cho d\u1ef1 \u00e1n (v\u00ed d\u1ee5: 11, 17, 21, v.v.). \u0110\u1ea3m b\u1ea3o b\u1ea1n \u0111\u00e3 c\u00e0i \u0111\u1eb7t JDK t\u01b0\u01a1ng \u1ee9ng tr\u00ean m\u00e1y.<\/p>\n\n\n\n<p><strong>Dependencies (Th\u01b0 vi\u1ec7n ph\u1ee5 thu\u1ed9c):<\/strong> \u0110\u00e2y l\u00e0 n\u01a1i b\u1ea1n ch\u1ecdn c\u00e1c &#8220;Starters&#8221; v\u00e0 th\u01b0 vi\u1ec7n c\u1ea7n thi\u1ebft cho d\u1ef1 \u00e1n.<\/p>\n\n\n\n<p>Nh\u1ea5p v\u00e0o n\u00fat <strong>&#8220;ADD DEPENDENCIES&#8230;&#8221;<\/strong> (ho\u1eb7c Ctrl+B \/ Cmd+B). M\u1ed9t \u00f4 t\u00ecm ki\u1ebfm s\u1ebd xu\u1ea5t hi\u1ec7n. B\u1ea1n c\u00f3 th\u1ec3 g\u00f5 t\u1eeb kh\u00f3a \u0111\u1ec3 t\u00ecm dependency. V\u00ed d\u1ee5:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>G\u00f5 &#8220;<code>web<\/code>&#8221; \u0111\u1ec3 th\u00eam Spring Web (x\u00e2y d\u1ef1ng \u1ee9ng d\u1ee5ng web, RESTful API).<\/li>\n\n\n\n<li>G\u00f5 &#8220;<code>jpa<\/code>&#8221; \u0111\u1ec3 th\u00eam Spring Data JPA (l\u00e0m vi\u1ec7c v\u1edbi c\u01a1 s\u1edf d\u1eef li\u1ec7u quan h\u1ec7).<\/li>\n\n\n\n<li>G\u00f5 &#8220;<code>security<\/code>&#8221; \u0111\u1ec3 th\u00eam Spring Security (b\u1ea3o m\u1eadt \u1ee9ng d\u1ee5ng).<\/li>\n\n\n\n<li>G\u00f5 &#8220;<code>lombok<\/code>&#8221; \u0111\u1ec3 th\u00eam Lombok (gi\u1ea3m thi\u1ec3u code boilerplate).<\/li>\n\n\n\n<li>G\u00f5 &#8220;<code>thymeleaf<\/code>&#8221; \u0111\u1ec3 th\u00eam Thymeleaf (template engine cho UI).<\/li>\n\n\n\n<li>G\u00f5 t\u00ean m\u1ed9t c\u01a1 s\u1edf d\u1eef li\u1ec7u nh\u01b0 &#8220;h2&#8221;, &#8220;mysql&#8221;, &#8220;postgresql&#8221; \u0111\u1ec3 th\u00eam driver t\u01b0\u01a1ng \u1ee9ng.<\/li>\n\n\n\n<li>C\u00e1c dependency \u0111\u00e3 ch\u1ecdn s\u1ebd xu\u1ea5t hi\u1ec7n \u1edf c\u1ed9t b\u00ean ph\u1ea3i.<\/li>\n<\/ul>\n\n\n\n<p><strong>B\u01b0\u1edbc 3: T\u1ea1o d\u1ef1 \u00e1n<\/strong>&nbsp;<\/p>\n\n\n\n<p>Sau khi \u0111\u00e3 h\u00e0i l\u00f2ng v\u1edbi c\u00e1c l\u1ef1a ch\u1ecdn, nh\u1ea5p v\u00e0o n\u00fat <strong>&#8220;GENERATE&#8221;<\/strong> (ho\u1eb7c Ctrl+Enter \/ Cmd+Enter).<\/p>\n\n\n\n<p><strong>B\u01b0\u1edbc 4: K\u1ebft qu\u1ea3<\/strong>&nbsp;<\/p>\n\n\n\n<p>Tr\u00ecnh duy\u1ec7t s\u1ebd t\u1ef1 \u0111\u1ed9ng t\u1ea3i v\u1ec1 m\u1ed9t file .zip (th\u01b0\u1eddng c\u00f3 t\u00ean l\u00e0 <code>Artifact<\/code> b\u1ea1n \u0111\u00e3 \u0111\u1eb7t, v\u00ed d\u1ee5: <code>my-spring-app.zip<\/code>). File n\u00e0y ch\u1ee9a to\u00e0n b\u1ed9 c\u1ea5u tr\u00fac d\u1ef1 \u00e1n Spring Boot \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh s\u1eb5n.<\/p>\n\n\n\n<p><strong>B\u01b0\u1edbc 5: Import v\u00e0o IDE<\/strong>&nbsp;<\/p>\n\n\n\n<p>Gi\u1ea3i n\u00e9n file .zip v\u1eeba t\u1ea3i v\u1ec1 v\u00e0o m\u1ed9t th\u01b0 m\u1ee5c tr\u00ean m\u00e1y t\u00ednh c\u1ee7a b\u1ea1n.<\/p>\n\n\n\n<p><strong>\u0110\u1ed1i v\u1edbi IntelliJ IDEA:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u1edf IntelliJ IDEA.<\/li>\n\n\n\n<li>Ch\u1ecdn File -&gt; Open&#8230; (ho\u1eb7c Open t\u1eeb m\u00e0n h\u00ecnh ch\u00e0o m\u1eebng).<\/li>\n\n\n\n<li>Duy\u1ec7t \u0111\u1ebfn th\u01b0 m\u1ee5c b\u1ea1n v\u1eeba gi\u1ea3i n\u00e9n d\u1ef1 \u00e1n.<\/li>\n\n\n\n<li>Ch\u1ecdn file pom.xml (n\u1ebfu l\u00e0 d\u1ef1 \u00e1n Maven) ho\u1eb7c build.gradle (n\u1ebfu l\u00e0 d\u1ef1 \u00e1n Gradle) v\u00e0 nh\u1ea5p OK.<\/li>\n\n\n\n<li>IntelliJ IDEA s\u1ebd t\u1ef1 \u0111\u1ed9ng nh\u1eadn di\u1ec7n v\u00e0 import d\u1ef1 \u00e1n, t\u1ea3i v\u1ec1 c\u00e1c dependencies.<\/li>\n<\/ul>\n\n\n\n<p><strong>\u0110\u1ed1i v\u1edbi Eclipse (v\u1edbi Spring Tools Suite &#8211; STS, ho\u1eb7c \u0111\u00e3 c\u00e0i plugin build tool t\u01b0\u01a1ng \u1ee9ng):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u1edf Eclipse.<\/li>\n\n\n\n<li>Ch\u1ecdn File -&gt; Import&#8230;.<\/li>\n\n\n\n<li>N\u1ebfu l\u00e0 d\u1ef1 \u00e1n Maven: G\u00f5 &#8220;Maven&#8221; v\u00e0o \u00f4 t\u00ecm ki\u1ebfm, ch\u1ecdn Existing Maven Projects, r\u1ed3i Next.<\/li>\n\n\n\n<li>N\u1ebfu l\u00e0 d\u1ef1 \u00e1n Gradle: G\u00f5 &#8220;Gradle&#8221; v\u00e0o \u00f4 t\u00ecm ki\u1ebfm, ch\u1ecdn Existing Gradle Project, r\u1ed3i Next.<\/li>\n\n\n\n<li>Nh\u1ea5p Browse&#8230; v\u00e0 tr\u1ecf \u0111\u1ebfn th\u01b0 m\u1ee5c g\u1ed1c c\u1ee7a d\u1ef1 \u00e1n b\u1ea1n v\u1eeba gi\u1ea3i n\u00e9n.<\/li>\n\n\n\n<li>Eclipse s\u1ebd qu\u00e9t d\u1ef1 \u00e1n, \u0111\u1ea3m b\u1ea3o file <code>pom.xml<\/code> ho\u1eb7c <code>build.gradle<\/code> \u0111\u01b0\u1ee3c ch\u1ecdn, r\u1ed3i nh\u1ea5p Finish.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-tich-h\u1ee3p-trong-ide\"><strong>T\u00edch h\u1ee3p trong IDE<\/strong><\/h3>\n\n\n\n<p>H\u1ea7u h\u1ebft c\u00e1c IDE Java ph\u1ed5 bi\u1ebfn hi\u1ec7n nay \u0111\u1ec1u t\u00edch h\u1ee3p s\u1eb5n Spring Initializr, gi\u00fap b\u1ea1n t\u1ea1o d\u1ef1 \u00e1n tr\u1ef1c ti\u1ebfp m\u00e0 kh\u00f4ng c\u1ea7n r\u1eddi kh\u1ecfi m\u00f4i tr\u01b0\u1eddng l\u00e0m vi\u1ec7c. L\u1ee3i \u00edch c\u1ee7a c\u00e1ch n\u00e0y l\u00e0 gi\u00fap quy tr\u00ecnh l\u00e0m vi\u1ec7c li\u1ec1n m\u1ea1ch h\u01a1n, IDE c\u00f3 th\u1ec3 t\u1ef1 \u0111\u1ed9ng thi\u1ebft l\u1eadp m\u1ed9t s\u1ed1 c\u1ea5u h\u00ecnh b\u1ed5 sung.<\/p>\n\n\n\n<p>D\u01b0\u1edbi \u0111\u00e2y l\u00e0 c\u00e1c b\u01b0\u1edbc \u0111\u1ec3 kh\u1edfi t\u1ea1o m\u1ed9t d\u1ef1 \u00e1n ho\u00e0n to\u00e0n m\u1edbi \u0111\u1ed1i v\u1edbi 3 IDE ph\u1ed5 bi\u1ebfn l\u00e0 <a href=\"https:\/\/www.jetbrains.com\/help\/idea\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>IntelliJ IDEA<\/strong><\/a>, <a href=\"https:\/\/spring.io\/tools\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Eclipse<\/strong><\/a> v\u00e0 <a href=\"https:\/\/marketplace.visualstudio.com\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Visual Studio Code<\/strong><\/a>.<\/p>\n\n\n\n<p><strong>IntelliJ IDEA:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>File -&gt; New -&gt; Project&#8230;<\/li>\n\n\n\n<li>Trong c\u1eeda s\u1ed5 New Project, ch\u1ecdn Spring Initializr t\u1eeb danh s\u00e1ch b\u00ean tr\u00e1i.<\/li>\n\n\n\n<li>B\u1ea1n s\u1ebd th\u1ea5y m\u1ed9t giao di\u1ec7n t\u01b0\u01a1ng t\u1ef1 nh\u01b0 start.spring.io \u0111\u1ec3 \u0111i\u1ec1n c\u00e1c th\u00f4ng tin Project SDK, Initializr Service URL (th\u01b0\u1eddng \u0111\u1ec3 m\u1eb7c \u0111\u1ecbnh), v\u00e0 c\u00e1c t\u00f9y ch\u1ecdn d\u1ef1 \u00e1n (Metadata, Dependencies).<\/li>\n\n\n\n<li>Nh\u1ea5p Next \u0111\u1ec3 ch\u1ecdn dependencies, r\u1ed3i Finish (ho\u1eb7c Create).<\/li>\n<\/ul>\n\n\n\n<p><strong>Eclipse (v\u1edbi Spring Tools Suite &#8211; STS plugin):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>File -&gt; New -&gt; Spring Starter Project.<\/li>\n\n\n\n<li>M\u1ed9t c\u1eeda s\u1ed5 t\u01b0\u01a1ng t\u1ef1 giao di\u1ec7n web s\u1ebd hi\u1ec7n ra, cho ph\u00e9p b\u1ea1n c\u1ea5u h\u00ecnh d\u1ef1 \u00e1n (t\u00ean, group, artifact, dependencies, v.v.).<\/li>\n\n\n\n<li>\u0110i\u1ec1n th\u00f4ng tin, ch\u1ecdn dependencies, r\u1ed3i nh\u1ea5p Finish.<\/li>\n<\/ul>\n\n\n\n<p><strong>Visual Studio Code (v\u1edbi Spring Boot Extension Pack):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u1edf Command Palette: Ctrl+Shift+P (Windows\/Linux) ho\u1eb7c Cmd+Shift+P (macOS).<\/li>\n\n\n\n<li>G\u00f5 Spring Initializr.<\/li>\n\n\n\n<li>Ch\u1ecdn Spring Initializr: Create a Maven Project ho\u1eb7c Spring Initializr: Create a Gradle Project.<\/li>\n\n\n\n<li>VS Code s\u1ebd h\u1ecfi b\u1ea1n t\u1eebng b\u01b0\u1edbc \u0111\u1ec3 c\u1ea5u h\u00ecnh d\u1ef1 \u00e1n (phi\u00ean b\u1ea3n Spring Boot, ng\u00f4n ng\u1eef, group, artifact, dependencies, v.v.) ngay trong Command Palette.<\/li>\n\n\n\n<li>Cu\u1ed1i c\u00f9ng, ch\u1ecdn th\u01b0 m\u1ee5c \u0111\u1ec3 l\u01b0u d\u1ef1 \u00e1n.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-s\u1eed-d\u1ee5ng-command-line-cli\"><strong>S\u1eed d\u1ee5ng Command Line (CLI)<\/strong><\/h3>\n\n\n\n<p>\u0110\u1ed1i v\u1edbi nh\u1eefng ng\u01b0\u1eddi th\u00edch l\u00e0m vi\u1ec7c tr\u00ean terminal ho\u1eb7c mu\u1ed1n t\u1ef1 \u0111\u1ed9ng h\u00f3a vi\u1ec7c t\u1ea1o d\u1ef1 \u00e1n qua script, Spring Initializr c\u0169ng c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng qua command line b\u1eb1ng c\u00e1c c\u00f4ng c\u1ee5 nh\u01b0 <code>curl<\/code> ho\u1eb7c HTTPie.<\/p>\n\n\n\n<p><strong>Nguy\u00ean t\u1eafc l\u00e0<\/strong> b\u1ea1n g\u1eedi m\u1ed9t HTTP request \u0111\u1ebfn API c\u1ee7a start.spring.io v\u1edbi c\u00e1c tham s\u1ed1 t\u01b0\u01a1ng \u1ee9ng v\u1edbi c\u1ea5u h\u00ecnh d\u1ef1 \u00e1n.<\/p>\n\n\n\n<p><strong>Xem c\u00e1c t\u00f9y ch\u1ecdn:<\/strong> \u0110\u1ec3 bi\u1ebft c\u00e1c dependency, lo\u1ea1i d\u1ef1 \u00e1n, phi\u00ean b\u1ea3n c\u00f3 s\u1eb5n, b\u1ea1n c\u00f3 th\u1ec3 g\u1eedi m\u1ed9t request GET: <code>curl https:\/\/start.spring.io<\/code>\u00a0<\/p>\n\n\n\n<p><strong>V\u00ed d\u1ee5 t\u1ea1o d\u1ef1 \u00e1n \u0111\u01a1n gi\u1ea3n (m\u1eb7c \u0111\u1ecbnh)<\/strong>:&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl https:\/\/start.spring.io\/starter.zip -o my-project.zip<\/code><\/pre>\n\n\n\n<p>L\u1ec7nh n\u00e0y s\u1ebd t\u1ea3i v\u1ec1 m\u1ed9t d\u1ef1 \u00e1n Maven, Java, phi\u00ean b\u1ea3n Spring Boot m\u1eb7c \u0111\u1ecbnh, \u0111\u00f3ng g\u00f3i Jar, kh\u00f4ng c\u00f3 dependencies c\u1ee5 th\u1ec3 n\u00e0o.<\/p>\n\n\n\n<p><strong>V\u00ed d\u1ee5 t\u1ea1o d\u1ef1 \u00e1n v\u1edbi c\u00e1c t\u00f9y ch\u1ecdn c\u1ee5 th\u1ec3:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl https:\/\/start.spring.io\/starter.zip \\\n-d type=gradle-project \\\n-d language=java \\\n-d platformVersion=3.3.0 \\\n-d packaging=jar \\\n-d jvmVersion=17 \\\n-d groupId=com.example \\\n-d artifactId=my-cli-app \\\n-d name=my-cli-app \\\n-d description=\"Demo project from CLI\" \\\n-d packageName=com.example.mycliapp \\\n-d dependencies=web,data-jpa,lombok \\\n-o my-cli-app.zip<\/code><\/pre>\n\n\n\n<p><strong>Gi\u1ea3i th\u00edch: <\/strong>\u0110o\u1ea1n code n\u00e0y l\u00e0 m\u1ed9t l\u1ec7nh curl d\u00f9ng \u0111\u1ec3 t\u1ef1 \u0111\u1ed9ng t\u1ea1o v\u00e0 t\u1ea3i v\u1ec1 m\u1ed9t d\u1ef1 \u00e1n Spring Boot \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh s\u1eb5n t\u1eeb Spring Initializr.<\/p>\n\n\n\n<p>H\u00e3y c\u00f9ng ph\u00e2n t\u00edch t\u1eebng d\u00f2ng l\u1ec7nh:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>curl https:\/\/start.spring.io\/starter.zip \\<\/strong><\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>curl<\/code>: L\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 d\u00f2ng l\u1ec7nh d\u00f9ng \u0111\u1ec3 truy\u1ec1n d\u1eef li\u1ec7u v\u1edbi URL. Trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y, n\u00f3 \u0111\u01b0\u1ee3c d\u00f9ng \u0111\u1ec3 g\u1eedi m\u1ed9t y\u00eau c\u1ea7u HTTP GET \u0111\u1ebfn m\u00e1y ch\u1ee7 c\u1ee7a Spring Initializr.<\/li>\n\n\n\n<li><code>https:\/\/start.spring.io\/starter.zip<\/code>: \u0110\u00e2y l\u00e0 \u0111\u1ecba ch\u1ec9 \u0111i\u1ec3m cu\u1ed1i (endpoint) c\u1ee7a Spring Initializr s\u1ebd tr\u1ea3 v\u1ec1 m\u1ed9t t\u1ec7p .zip ch\u1ee9a c\u1ea5u tr\u00fac d\u1ef1 \u00e1n \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u.<\/li>\n\n\n\n<li><code>\\<\/code>: K\u00fd t\u1ef1 g\u1ea1ch ch\u00e9o ng\u01b0\u1ee3c \u1edf cu\u1ed1i d\u00f2ng b\u00e1o hi\u1ec7u r\u1eb1ng l\u1ec7nh s\u1ebd ti\u1ebfp t\u1ee5c \u1edf d\u00f2ng ti\u1ebfp theo (\u0111\u1ec3 d\u1ec5 \u0111\u1ecdc h\u01a1n khi c\u00f3 nhi\u1ec1u tham s\u1ed1).<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>-d type=gradle-project \\<\/strong><\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>-d<\/code>: T\u00f9y ch\u1ecdn n\u00e0y c\u1ee7a curl d\u00f9ng \u0111\u1ec3 g\u1eedi d\u1eef li\u1ec7u trong m\u1ed9t y\u00eau c\u1ea7u POST. Tuy nhi\u00ean, Spring Initializr c\u0169ng ch\u1ea5p nh\u1eadn c\u00e1c tham s\u1ed1 n\u00e0y qua GET nh\u01b0 m\u1ed9t ph\u1ea7n c\u1ee7a query string.<\/li>\n\n\n\n<li><code>type=gradle-project<\/code>: Ch\u1ec9 \u0111\u1ecbnh r\u1eb1ng d\u1ef1 \u00e1n s\u1ebd s\u1eed d\u1ee5ng Gradle l\u00e0m c\u00f4ng c\u1ee5 x\u00e2y d\u1ef1ng (build tool). C\u00e1c l\u1ef1a ch\u1ecdn kh\u00e1c c\u00f3 th\u1ec3 l\u00e0 maven-project.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>-d language=java \\<\/strong><\/code><\/pre>\n\n\n\n<p><code>language=java<\/code>: Ch\u1ecdn Java l\u00e0m ng\u00f4n ng\u1eef l\u1eadp tr\u00ecnh cho d\u1ef1 \u00e1n. C\u00e1c l\u1ef1a ch\u1ecdn kh\u00e1c c\u00f3 th\u1ec3 l\u00e0 kotlin ho\u1eb7c groovy.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>-d platformVersion=3.3.0 \\<\/strong><\/code><\/pre>\n\n\n\n<p><code>platformVersion=3.3.0<\/code>: (L\u01b0u \u00fd: C\u00f3 th\u1ec3 \u0111\u00e2y l\u00e0 bootVersion ho\u1eb7c springBootVersion t\u00f9y theo phi\u00ean b\u1ea3n c\u1ee7a Spring Initializr API, nh\u01b0ng \u00fd ngh\u0129a chung l\u00e0) X\u00e1c \u0111\u1ecbnh phi\u00ean b\u1ea3n Spring Boot s\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng cho d\u1ef1 \u00e1n. \u1ede \u0111\u00e2y l\u00e0 phi\u00ean b\u1ea3n 3.3.0.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>-d packaging=jar \\<\/strong><\/code><\/pre>\n\n\n\n<p><code>packaging=jar<\/code>: Ch\u1ec9 \u0111\u1ecbnh r\u1eb1ng d\u1ef1 \u00e1n s\u1ebd \u0111\u01b0\u1ee3c \u0111\u00f3ng g\u00f3i th\u00e0nh m\u1ed9t t\u1ec7p JAR (Java Archive). L\u1ef1a ch\u1ecdn kh\u00e1c th\u01b0\u1eddng l\u00e0 war (Web Application Archive) cho c\u00e1c \u1ee9ng d\u1ee5ng web tri\u1ec3n khai tr\u00ean m\u00e1y ch\u1ee7 servlet truy\u1ec1n th\u1ed1ng.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>-d jvmVersion=17 \\<\/strong><\/code><\/pre>\n\n\n\n<p><code>jvmVersion=17<\/code>: (L\u01b0u \u00fd: Th\u01b0\u1eddng l\u00e0 javaVersion) Ch\u1ec9 \u0111\u1ecbnh phi\u00ean b\u1ea3n Java Development Kit (JDK) m\u00e0 d\u1ef1 \u00e1n s\u1ebd nh\u1eafm t\u1edbi. \u1ede \u0111\u00e2y l\u00e0 Java 17.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>-d groupId=com.example \\<\/strong><\/code><\/pre>\n\n\n\n<p><code>groupId=com.example<\/code>: \u0110\u00e2y l\u00e0 m\u1ed9t ph\u1ea7n c\u1ee7a t\u1ecda \u0111\u1ed9 Maven (Maven coordinates), th\u01b0\u1eddng d\u00f9ng \u0111\u1ec3 x\u00e1c \u0111\u1ecbnh t\u1ed5 ch\u1ee9c ho\u1eb7c nh\u00f3m t\u1ea1o ra d\u1ef1 \u00e1n. Quy \u01b0\u1edbc \u0111\u1eb7t t\u00ean th\u01b0\u1eddng l\u00e0 t\u00ean mi\u1ec1n \u0111\u1ea3o ng\u01b0\u1ee3c.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>-d artifactId=my-cli-app \\<\/strong><\/code><\/pre>\n\n\n\n<p><code>artifactId=my-cli-app<\/code>: \u0110\u00e2y c\u0169ng l\u00e0 m\u1ed9t ph\u1ea7n c\u1ee7a t\u1ecda \u0111\u1ed9 Maven, l\u00e0 t\u00ean c\u1ee7a ch\u00ednh d\u1ef1 \u00e1n ho\u1eb7c module \u0111\u00f3.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>-d name=my-cli-app \\<\/strong><\/code><\/pre>\n\n\n\n<p><code>name=my-cli-app<\/code>: T\u00ean hi\u1ec3n th\u1ecb c\u1ee7a d\u1ef1 \u00e1n. Th\u01b0\u1eddng gi\u1ed1ng v\u1edbi artifactId.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>-d description=\"Demo project from CLI\" \\<\/strong><\/code><\/pre>\n\n\n\n<p><code>description=\"Demo project from CLI\"<\/code>: M\u1ed9t m\u00f4 t\u1ea3 ng\u1eafn v\u1ec1 d\u1ef1 \u00e1n.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>-d packageName=com.example.mycliapp \\<\/strong><\/code><\/pre>\n\n\n\n<p><code>packageName=com.example.mycliapp<\/code>: T\u00ean g\u00f3i (package) c\u01a1 s\u1edf cho m\u00e3 ngu\u1ed3n Java c\u1ee7a b\u1ea1n. Th\u01b0\u1eddng \u0111\u01b0\u1ee3c t\u1ea1o t\u1eeb groupId v\u00e0 artifactId.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>-d dependencies=web,data-jpa,lombok \\<\/strong><\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>dependencies=web,data-jpa,lombok<\/code>: Li\u1ec7t k\u00ea c\u00e1c &#8220;starter&#8221; ho\u1eb7c th\u01b0 vi\u1ec7n ph\u1ee5 thu\u1ed9c (dependencies) m\u00e0 b\u1ea1n mu\u1ed1n th\u00eam v\u00e0o d\u1ef1 \u00e1n. C\u00e1c gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c ng\u0103n c\u00e1ch b\u1edfi d\u1ea5u ph\u1ea9y.<\/li>\n\n\n\n<li><code>web<\/code>: Bao g\u1ed3m Spring MVC v\u00e0 Tomcat nh\u00fang, c\u1ea7n thi\u1ebft \u0111\u1ec3 x\u00e2y d\u1ef1ng \u1ee9ng d\u1ee5ng web v\u00e0 RESTful API.<\/li>\n\n\n\n<li><code>data-jpa<\/code>: Cung c\u1ea5p h\u1ed7 tr\u1ee3 cho Java Persistence API (JPA) \u0111\u1ec3 t\u01b0\u01a1ng t\u00e1c v\u1edbi c\u01a1 s\u1edf d\u1eef li\u1ec7u.<\/li>\n\n\n\n<li><code>lombok<\/code>: M\u1ed9t th\u01b0 vi\u1ec7n Java gi\u00fap gi\u1ea3m thi\u1ec3u m\u00e3 so\u1ea1n s\u1eb5n (boilerplate code) nh\u01b0 getters, setters, constructors, v.v. b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng c\u00e1c ch\u00fa th\u00edch (annotations).<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>-o my-cli-app.zip<\/strong><\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>-o<\/code>: T\u00f9y ch\u1ecdn n\u00e0y c\u1ee7a curl ch\u1ec9 \u0111\u1ecbnh t\u00ean t\u1ec7p \u0111\u1ea7u ra.<\/li>\n\n\n\n<li><code>my-cli-app.zip<\/code>: K\u1ebft qu\u1ea3 (t\u1ec7p .zip ch\u1ee9a d\u1ef1 \u00e1n) s\u1ebd \u0111\u01b0\u1ee3c l\u01b0u v\u1edbi t\u00ean n\u00e0y trong th\u01b0 m\u1ee5c hi\u1ec7n t\u1ea1i c\u1ee7a b\u1ea1n.<\/li>\n<\/ul>\n\n\n\n<p>(L\u01b0u \u00fd: platformVersion l\u00e0 phi\u00ean b\u1ea3n Spring Boot. C\u00e1c gi\u00e1 tr\u1ecb dependencies \u0111\u01b0\u1ee3c ph\u00e2n c\u00e1ch b\u1eb1ng d\u1ea5u ph\u1ea9y.)<\/p>\n\n\n\n<p><strong>C\u00e1ch n\u00e0y h\u1eefu \u00edch cho:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>T\u1ef1 \u0111\u1ed9ng h\u00f3a vi\u1ec7c t\u1ea1o nhi\u1ec1u d\u1ef1 \u00e1n v\u1edbi c\u1ea5u h\u00ecnh t\u01b0\u01a1ng t\u1ef1.<\/li>\n\n\n\n<li>T\u00edch h\u1ee3p v\u00e0o c\u00e1c pipeline CI\/CD.<\/li>\n\n\n\n<li>Nh\u1eefng ng\u01b0\u1eddi d\u00f9ng \u01b0a th\u00edch l\u00e0m vi\u1ec7c v\u1edbi command line.<\/li>\n<\/ul>\n\n\n\n<p>V\u1edbi ba c\u00e1ch ti\u1ebfp c\u1eadn n\u00e0y, b\u1ea1n c\u00f3 th\u1ec3 l\u1ef1a ch\u1ecdn ph\u01b0\u01a1ng ph\u00e1p ph\u00f9 h\u1ee3p nh\u1ea5t v\u1edbi s\u1edf th\u00edch v\u00e0 quy tr\u00ecnh l\u00e0m vi\u1ec7c c\u1ee7a m\u00ecnh \u0111\u1ec3 kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n Spring Boot m\u1ed9t c\u00e1ch nhanh ch\u00f3ng v\u00e0 hi\u1ec7u qu\u1ea3.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cac-tinh-nang-va-tuy-ch\u1ecdn-khac-c\u1ee7a-spring-initializr\"><span class=\"ez-toc-section\" id=\"Cac_tinh_nang_va_tuy_chon_khac_cua_Spring_Initializr\"><\/span><strong>C\u00e1c t\u00ednh n\u0103ng v\u00e0 t\u00f9y ch\u1ecdn kh\u00e1c c\u1ee7a Spring Initializr<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Ngo\u00e0i c\u00e1c ch\u1ee9c n\u0103ng ch\u00ednh \u0111\u00e3 \u0111\u1ec1 c\u1eadp, Spring Initializr c\u00f2n cung c\u1ea5p m\u1ed9t s\u1ed1 t\u00ednh n\u0103ng b\u1ed5 sung gi\u00fap b\u1ea1n ki\u1ec3m so\u00e1t v\u00e0 chia s\u1ebb c\u1ea5u h\u00ecnh d\u1ef1 \u00e1n m\u1ed9t c\u00e1ch hi\u1ec7u qu\u1ea3:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-b\u1ed9-s\u01b0u-t\u1eadp-dependencies-starters-da-d\u1ea1ng\"><strong>B\u1ed9 s\u01b0u t\u1eadp Dependencies (Starters) \u0111a d\u1ea1ng<\/strong><\/h3>\n\n\n\n<p>M\u1ed9t trong nh\u1eefng s\u1ee9c m\u1ea1nh l\u1edbn nh\u1ea5t c\u1ee7a Spring Boot, v\u00e0 \u0111\u01b0\u1ee3c th\u1ec3 hi\u1ec7n r\u00f5 qua Spring Initializr, ch\u00ednh l\u00e0 h\u1ec7 sinh th\u00e1i c\u00e1c &#8220;Starters&#8221;. \u0110\u00e2y kh\u00f4ng ch\u1ec9 l\u00e0 v\u00e0i th\u01b0 vi\u1ec7n c\u01a1 b\u1ea3n m\u00e0 l\u00e0 m\u1ed9t b\u1ed9 s\u01b0u t\u1eadp phong ph\u00fa, \u0111\u01b0\u1ee3c qu\u1ea3n l\u00fd ch\u1eb7t ch\u1ebd, bao ph\u1ee7 h\u1ea7u h\u1ebft c\u00e1c nhu c\u1ea7u ph\u1ed5 bi\u1ebfn trong ph\u00e1t tri\u1ec3n \u1ee9ng d\u1ee5ng hi\u1ec7n \u0111\u1ea1i:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Web &amp; API:<\/strong> Spring Web (cho MVC v\u00e0 RESTful APIs), Spring WebFlux (cho l\u1eadp tr\u00ecnh reactive).<\/li>\n\n\n\n<li><strong>Truy c\u1eadp D\u1eef li\u1ec7u:<\/strong> Spring Data JPA (v\u1edbi c\u00e1c c\u01a1 s\u1edf d\u1eef li\u1ec7u SQL), Spring Data MongoDB, Spring Data Redis (cho NoSQL), JDBC API.<\/li>\n\n\n\n<li><strong>B\u1ea3o m\u1eadt:<\/strong> Spring Security, OAuth2 Client, OAuth2 Resource Server.<\/li>\n\n\n\n<li><strong>Template Engines:<\/strong> Thymeleaf, Apache Freemarker, Mustache.<\/li>\n\n\n\n<li><strong>Messaging:<\/strong> Spring for RabbitMQ, Spring for Apache Kafka.<\/li>\n\n\n\n<li><strong>Cloud:<\/strong> C\u00e1c starters cho AWS, Azure, Google Cloud Platform (GCP), gi\u00fap t\u00edch h\u1ee3p d\u1ec5 d\u00e0ng v\u1edbi c\u00e1c d\u1ecbch v\u1ee5 \u0111\u00e1m m\u00e2y.<\/li>\n\n\n\n<li><strong>Observability:<\/strong> Spring Boot Actuator (cung c\u1ea5p c\u00e1c endpoint gi\u00e1m s\u00e1t v\u00e0 qu\u1ea3n l\u00fd), Micrometer (cho metrics), t\u00edch h\u1ee3p v\u1edbi Zipkin ho\u1eb7c Spring Cloud Sleuth (cho distributed tracing).<\/li>\n\n\n\n<li><strong>Testing:<\/strong> Spring Boot Test (bao g\u1ed3m JUnit, Mockito, AssertJ).<\/li>\n\n\n\n<li><strong>C\u00f4ng c\u1ee5 ti\u1ec7n \u00edch:<\/strong> Lombok (gi\u1ea3m boilerplate code), Spring Boot DevTools (t\u1ef1 \u0111\u1ed9ng restart, live reload).<\/li>\n<\/ul>\n\n\n\n<p>Khi b\u1ea1n nh\u1ea5n n\u00fat <strong>&#8220;ADD DEPENDENCIES&#8230;&#8221;<\/strong>, \u0111\u1eebng ng\u1ea7n ng\u1ea1i s\u1eed d\u1ee5ng \u00f4 t\u00ecm ki\u1ebfm \u0111\u1ec3 kh\u00e1m ph\u00e1. G\u00f5 c\u00e1c t\u1eeb kh\u00f3a li\u00ean quan \u0111\u1ebfn t\u00ednh n\u0103ng b\u1ea1n c\u1ea7n (v\u00ed d\u1ee5: &#8220;mail&#8221;, &#8220;cache&#8221;, &#8220;batch&#8221;, &#8220;integration&#8221;), Spring Initializr s\u1ebd hi\u1ec3n th\u1ecb c\u00e1c Starters t\u01b0\u01a1ng \u1ee9ng, th\u01b0\u1eddng \u0111i k\u00e8m m\u00f4 t\u1ea3 ng\u1eafn g\u1ecdn \u0111\u1ec3 b\u1ea1n d\u1ec5 d\u00e0ng l\u1ef1a ch\u1ecdn.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-chia-s\u1ebb-c\u1ea5u-hinh-d\u1ef1-an-d\u1ec5-dang-v\u1edbi-tinh-nang-share\"><strong>Chia s\u1ebb c\u1ea5u h\u00ecnh d\u1ef1 \u00e1n d\u1ec5 d\u00e0ng v\u1edbi t\u00ednh n\u0103ng &#8220;Share&#8221;<\/strong><\/h3>\n\n\n\n<p>B\u1ea1n \u0111\u00e3 t\u1ea1o ra m\u1ed9t c\u1ea5u h\u00ecnh d\u1ef1 \u00e1n \u01b0ng \u00fd v\u1edbi \u0111\u1ea7y \u0111\u1ee7 c\u00e1c l\u1ef1a ch\u1ecdn t\u1eeb build tool, phi\u00ean b\u1ea3n Java cho \u0111\u1ebfn danh s\u00e1ch dependencies ph\u1ee9c t\u1ea1p v\u00e0 mu\u1ed1n chia s\u1ebb n\u00f3 v\u1edbi \u0111\u1ed3ng nghi\u1ec7p, b\u1ea1n b\u00e8 ho\u1eb7c l\u01b0u l\u1ea1i \u0111\u1ec3 s\u1eed d\u1ee5ng sau? Spring Initializr cung c\u1ea5p t\u00ednh n\u0103ng <strong>&#8220;Share&#8221;<\/strong> (Chia s\u1ebb) c\u1ef1c k\u1ef3 ti\u1ec7n l\u1ee3i.<\/p>\n\n\n\n<p><strong>C\u00e1ch ho\u1ea1t \u0111\u1ed9ng:<\/strong> Sau khi b\u1ea1n \u0111\u00e3 ch\u1ecdn xong t\u1ea5t c\u1ea3 c\u00e1c t\u00f9y ch\u1ecdn cho d\u1ef1 \u00e1n c\u1ee7a m\u00ecnh tr\u00ean<a href=\"https:\/\/start.spring.io\/\" target=\"_blank\" rel=\"noreferrer noopener\"> start.spring.io<\/a>, h\u00e3y t\u00ecm n\u00fat <strong>&#8220;Share&#8221;<\/strong> (Th\u01b0\u1eddng n\u1eb1m \u1edf g\u1ea7n cu\u1ed1i trang ho\u1eb7c trong m\u1ed9t menu t\u00f9y ch\u1ecdn).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcLNVp1hD1JO_tJvVZOvY5bongUbndnKTil_3N-ZBkc2QfH4wczLisqrwsFzkEF-SdpLgIflycvMQy8hyvSMvHvuGs4lE0N30TdNKUaUB_Jwf2WAR7_WQyMYBYKYoMBHZOTdnnB?key=wI7C_3o_jQDYFTWr6MwGheri\" alt=\"\"\/><\/figure>\n\n\n\n<p><strong>K\u1ebft qu\u1ea3:<\/strong> Khi nh\u1ea5p v\u00e0o \u0111\u00f3, Spring Initializr s\u1ebd t\u1ea1o ra m\u1ed9t <strong>URL duy nh\u1ea5t<\/strong>. URL n\u00e0y ch\u1ee9a to\u00e0n b\u1ed9 th\u00f4ng tin c\u1ea5u h\u00ecnh d\u1ef1 \u00e1n b\u1ea1n v\u1eeba thi\u1ebft l\u1eadp.<\/p>\n\n\n\n<p><strong>L\u1ee3i \u00edch:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>L\u00e0m vi\u1ec7c nh\u00f3m:<\/strong> \u0110\u1ea3m b\u1ea3o m\u1ecdi th\u00e0nh vi\u00ean trong nh\u00f3m kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n v\u1edbi c\u00f9ng m\u1ed9t b\u1ed9 c\u1ea5u h\u00ecnh chu\u1ea9n.<\/li>\n\n\n\n<li><strong>H\u01b0\u1edbng d\u1eabn v\u00e0 Demo:<\/strong> D\u1ec5 d\u00e0ng chia s\u1ebb c\u1ea5u h\u00ecnh m\u1eabu cho c\u00e1c b\u00e0i h\u01b0\u1edbng d\u1eabn ho\u1eb7c khi demo.<\/li>\n\n\n\n<li><strong>H\u1ed7 tr\u1ee3 kh\u1eafc ph\u1ee5c s\u1ef1 c\u1ed1:<\/strong> Khi c\u1ea7n s\u1ef1 gi\u00fap \u0111\u1ee1 tr\u00ean c\u00e1c di\u1ec5n \u0111\u00e0n ho\u1eb7c t\u1eeb \u0111\u1ed3ng nghi\u1ec7p, b\u1ea1n c\u00f3 th\u1ec3 g\u1eedi URL n\u00e0y \u0111\u1ec3 h\u1ecd nhanh ch\u00f3ng t\u00e1i t\u1ea1o l\u1ea1i m\u00f4i tr\u01b0\u1eddng d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n.<\/li>\n\n\n\n<li><strong>L\u01b0u tr\u1eef c\u00e1 nh\u00e2n:<\/strong> B\u1ea1n c\u00f3 th\u1ec3 bookmark URL n\u00e0y \u0111\u1ec3 nhanh ch\u00f3ng t\u1ea1o l\u1ea1i d\u1ef1 \u00e1n t\u01b0\u01a1ng t\u1ef1 trong t\u01b0\u01a1ng lai.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-xem-tr\u01b0\u1edbc-d\u1ef1-an-v\u1edbi-nut-explore-ho\u1eb7c-ctrl-space\"><strong>Xem tr\u01b0\u1edbc d\u1ef1 \u00e1n v\u1edbi n\u00fat &#8220;Explore&#8221; (ho\u1eb7c <\/strong><strong>Ctrl+Space<\/strong><strong>)<\/strong><\/h3>\n\n\n\n<p>Tr\u01b0\u1edbc khi quy\u1ebft \u0111\u1ecbnh nh\u1ea5n &#8220;GENERATE&#8221; \u0111\u1ec3 t\u1ea3i d\u1ef1 \u00e1n v\u1ec1, b\u1ea1n c\u00f3 mu\u1ed1n xem tr\u01b0\u1edbc c\u1ea5u tr\u00fac th\u01b0 m\u1ee5c v\u00e0 n\u1ed9i dung c\u1ee7a c\u00e1c file quan tr\u1ecdng s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o ra kh\u00f4ng? T\u00ednh n\u0103ng <strong>&#8220;Explore&#8221;<\/strong> (Kh\u00e1m ph\u00e1) cho ph\u00e9p b\u1ea1n l\u00e0m \u0111i\u1ec1u \u0111\u00f3.<\/p>\n\n\n\n<p><strong>C\u00e1ch truy c\u1eadp:<\/strong> Tr\u00ean trang<a href=\"https:\/\/start.spring.io\/\" target=\"_blank\" rel=\"noreferrer noopener\"> start.spring.io<\/a>, b\u1ea1n c\u00f3 th\u1ec3 t\u00ecm th\u1ea5y n\u00fat\/li\u00ean k\u1ebft <strong>&#8220;Explore&#8221;<\/strong> (th\u01b0\u1eddng n\u1eb1m g\u1ea7n n\u00fat &#8220;GENERATE&#8221;) ho\u1eb7c s\u1eed d\u1ee5ng ph\u00edm t\u1eaft Ctrl+Space.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXde3hmdQ24VSFWBRkpsYw8biDhxdETj8pGWYXOhwpchFkEOZ7XVohFD8LPK-fN1nWJCfN4HxPIud9dc1ZfqY83Jj61ekk9eT-yHAlpo3lBaMXPYI0dOZyZZbodmfx86K7AYnwIO?key=wI7C_3o_jQDYFTWr6MwGheri\" alt=\"\"\/><\/figure>\n\n\n\n<p><strong>Nh\u1eefng g\u00ec b\u1ea1n c\u00f3 th\u1ec3 xem:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>C\u1ea5u tr\u00fac th\u01b0 m\u1ee5c:<\/strong> M\u1ed9t c\u00e1i nh\u00ecn t\u1ed5ng quan v\u1ec1 c\u00e1c th\u01b0 m\u1ee5c ch\u00ednh nh\u01b0 <code>src\/main\/java<\/code>, <code>src\/main\/resources<\/code>, <code>src\/test\/java<\/code>.<\/li>\n\n\n\n<li><strong>N\u1ed9i dung file build:<\/strong> Xem tr\u01b0\u1edbc n\u1ed9i dung c\u1ee7a file <code>pom.xml<\/code> (n\u1ebfu ch\u1ecdn Maven) ho\u1eb7c <code>build.gradle<\/code> (n\u1ebfu ch\u1ecdn Gradle). \u0110i\u1ec1u n\u00e0y r\u1ea5t h\u1eefu \u00edch \u0111\u1ec3 ki\u1ec3m tra xem c\u00e1c dependencies b\u1ea1n ch\u1ecdn \u0111\u00e3 \u0111\u01b0\u1ee3c th\u00eam v\u00e0o \u0111\u00fang c\u00e1ch ch\u01b0a.<\/li>\n\n\n\n<li><strong>L\u1edbp Application ch\u00ednh:<\/strong> Xem tr\u01b0\u1edbc file Java\/Kotlin\/Groovy ch\u1ee9a h\u00e0m main v\u00e0 annotation <code>@SpringBootApplication<\/code>.<\/li>\n\n\n\n<li><strong>C\u00e1c file c\u1ea5u h\u00ecnh c\u01a1 b\u1ea3n:<\/strong> V\u00ed d\u1ee5 nh\u01b0 <code>application.properties<\/code>.<img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"253\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcaz2sse_dkayUGMvWwBwZUTdjZHbuD_R81feINaJ-7g8ASCu4hko2-h5wvyIyulU4fHUpH1EJXq23Jq4s_UaoNo9imyP8Dc6jxWtbVyvLgmqtAr5PT4Px1du2Tlg0bWBFxi9ANTA?key=wI7C_3o_jQDYFTWr6MwGheri\"><\/li>\n<\/ul>\n\n\n\n<p><strong>L\u1ee3i \u00edch:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ki\u1ec3m tra v\u00e0 x\u00e1c nh\u1eadn:<\/strong> \u0110\u1ea3m b\u1ea3o r\u1eb1ng c\u00e1c l\u1ef1a ch\u1ecdn c\u1ee7a b\u1ea1n \u0111\u01b0\u1ee3c ph\u1ea3n \u00e1nh ch\u00ednh x\u00e1c trong c\u1ea5u h\u00ecnh d\u1ef1 \u00e1n.<\/li>\n\n\n\n<li><strong>H\u1ecdc h\u1ecfi:<\/strong> Hi\u1ec3u r\u00f5 h\u01a1n v\u1ec1 c\u00e1ch Spring Initializr t\u1ea1o ra d\u1ef1 \u00e1n v\u00e0 t\u00e1c \u0111\u1ed9ng c\u1ee7a c\u00e1c t\u00f9y ch\u1ecdn kh\u00e1c nhau l\u00ean c\u1ea5u tr\u00fac v\u00e0 file build.<\/li>\n\n\n\n<li><strong>Tinh ch\u1ec9nh nhanh:<\/strong> N\u1ebfu th\u1ea5y c\u00f3 g\u00ec \u0111\u00f3 ch\u01b0a \u1ed5n, b\u1ea1n c\u00f3 th\u1ec3 quay l\u1ea1i v\u00e0 thay \u0111\u1ed5i c\u00e1c t\u00f9y ch\u1ecdn ngay l\u1eadp t\u1ee9c tr\u01b0\u1edbc khi generate.<\/li>\n<\/ul>\n\n\n\n<p>Vi\u1ec7c t\u1eadn d\u1ee5ng c\u00e1c t\u00ednh n\u0103ng n\u00e0y s\u1ebd gi\u00fap b\u1ea1n l\u00e0m ch\u1ee7 Spring Initializr t\u1ed1t h\u01a1n, t\u1eeb \u0111\u00f3 t\u1ed1i \u01b0u h\u00f3a quy tr\u00ecnh l\u00e0m vi\u1ec7c v\u00e0 \u0111\u1ea3m b\u1ea3o c\u00e1c d\u1ef1 \u00e1n Spring Boot \u0111\u01b0\u1ee3c kh\u1edfi t\u1ea1o m\u1ed9t c\u00e1ch ch\u00ednh x\u00e1c v\u00e0 nh\u1ea5t qu\u00e1n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-vi-d\u1ee5-xay-d\u1ef1ng-\u1ee9ng-d\u1ee5ng-rest-api-d\u01a1n-gi\u1ea3n\"><span class=\"ez-toc-section\" id=\"Vi_du_xay_dung_ung_dung_REST_API_don_gian\"><\/span><strong>V\u00ed d\u1ee5 x\u00e2y d\u1ef1ng \u1ee9ng d\u1ee5ng REST API \u0111\u01a1n gi\u1ea3n<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u0110\u1ec3 minh h\u1ecda s\u1ee9c m\u1ea1nh c\u1ee7a Spring Initializr, ch\u00fang ta s\u1ebd c\u00f9ng nhau x\u00e2y d\u1ef1ng m\u1ed9t \u1ee9ng d\u1ee5ng REST API c\u1ef1c k\u1ef3 \u0111\u01a1n gi\u1ea3n. API n\u00e0y s\u1ebd c\u00f3 m\u1ed9t endpoint \/hello v\u00e0 khi \u0111\u01b0\u1ee3c g\u1ecdi b\u1eb1ng ph\u01b0\u01a1ng th\u1ee9c GET, n\u00f3 s\u1ebd tr\u1ea3 v\u1ec1 chu\u1ed7i &#8220;Hello, World!&#8221;.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-b\u01b0\u1edbc-1-c\u1ea5u-hinh-d\u1ef1-an-tren-spring-initializr\"><strong>B\u01b0\u1edbc 1: C\u1ea5u h\u00ecnh d\u1ef1 \u00e1n tr\u00ean Spring Initializr<\/strong><\/h3>\n\n\n\n<p>M\u1edf tr\u00ecnh duy\u1ec7t v\u00e0 truy c\u1eadp<a href=\"https:\/\/start.spring.io\/\"> https:\/\/start.spring.io\/<\/a>.<\/p>\n\n\n\n<p>Thi\u1ebft l\u1eadp c\u00e1c t\u00f9y ch\u1ecdn cho d\u1ef1 \u00e1n nh\u01b0 sau:<\/p>\n\n\n\n<p><strong>Project:<\/strong> Ch\u1ecdn Maven Project.<\/p>\n\n\n\n<p><strong>Language:<\/strong> Ch\u1ecdn Java.<\/p>\n\n\n\n<p><strong>Spring Boot:<\/strong> Gi\u1eef nguy\u00ean phi\u00ean b\u1ea3n \u0111\u01b0\u1ee3c g\u1ee3i \u00fd (th\u01b0\u1eddng l\u00e0 phi\u00ean b\u1ea3n \u1ed5n \u0111\u1ecbnh m\u1edbi nh\u1ea5t, v\u00ed d\u1ee5 t\u1ea1i th\u1eddi \u0111i\u1ec3m th\u00e1ng 5 n\u0103m 2025, c\u00f3 th\u1ec3 l\u00e0 m\u1ed9t phi\u00ean b\u1ea3n nh\u01b0 3.x.x ho\u1eb7c cao h\u01a1n).<\/p>\n\n\n\n<p><strong>Project Metadata:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Group:<\/strong> <code>com.example<\/code><\/li>\n\n\n\n<li><strong>Artifact:<\/strong> <code>hello-spring-api<\/code><\/li>\n\n\n\n<li><strong>Name:<\/strong> <code>hello-spring-api<\/code><\/li>\n\n\n\n<li><strong>Description:<\/strong> <code>Demo project for Spring Boot REST API<\/code><\/li>\n\n\n\n<li><strong>Package name:<\/strong> <code>com.example.hellospringapi<\/code> (th\u01b0\u1eddng t\u1ef1 \u0111\u1ed9ng t\u1ea1o ra)<\/li>\n\n\n\n<li><strong>Packaging:<\/strong> Ch\u1ecdn <code>Jar<\/code>.<\/li>\n\n\n\n<li><strong>Java:<\/strong> Ch\u1ecdn phi\u00ean b\u1ea3n Java b\u1ea1n \u0111\u00e3 c\u00e0i \u0111\u1eb7t v\u00e0 mu\u1ed1n s\u1eed d\u1ee5ng (v\u00ed d\u1ee5: 17 ho\u1eb7c 21).<\/li>\n<\/ul>\n\n\n\n<p><strong>Dependencies:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Nh\u1ea5p v\u00e0o n\u00fat <strong>&#8220;ADD DEPENDENCIES&#8230;&#8221;<\/strong>.<\/li>\n\n\n\n<li>Trong \u00f4 t\u00ecm ki\u1ebfm, g\u00f5 &#8220;web&#8221;.<\/li>\n\n\n\n<li>Ch\u1ecdn <strong>&#8220;Spring Web&#8221;<\/strong> t\u1eeb danh s\u00e1ch k\u1ebft qu\u1ea3. Dependency n\u00e0y c\u1ea7n thi\u1ebft \u0111\u1ec3 x\u00e2y d\u1ef1ng c\u00e1c \u1ee9ng d\u1ee5ng web, bao g\u1ed3m c\u1ea3 RESTful API v\u1edbi Spring MVC. N\u00f3 c\u0169ng t\u00edch h\u1ee3p s\u1eb5n m\u1ed9t embedded server nh\u01b0 Tomcat.<\/li>\n<\/ul>\n\n\n\n<p>Giao di\u1ec7n c\u1ee7a b\u1ea1n l\u00fac n\u00e0y s\u1ebd tr\u00f4ng t\u01b0\u01a1ng t\u1ef1 nh\u01b0 sau (c\u00e1c chi ti\u1ebft nh\u1ecf c\u00f3 th\u1ec3 kh\u00e1c bi\u1ec7t t\u00f9y theo phi\u00ean b\u1ea3n Spring Initializr):<em><\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-b\u01b0\u1edbc-2-generate-va-import-d\u1ef1-an-vao-ide\"><strong>B\u01b0\u1edbc 2: Generate v\u00e0 Import d\u1ef1 \u00e1n v\u00e0o IDE<\/strong><\/h3>\n\n\n\n<p>Sau khi \u0111\u00e3 ki\u1ec3m tra l\u1ea1i c\u00e1c l\u1ef1a ch\u1ecdn, nh\u1ea5p v\u00e0o n\u00fat <strong>&#8220;GENERATE&#8221;<\/strong>.<\/p>\n\n\n\n<p>M\u1ed9t file hello-spring-api.zip (ho\u1eb7c t\u00ean t\u01b0\u01a1ng t\u1ef1 d\u1ef1a tr\u00ean Artifact b\u1ea1n \u0111\u1eb7t) s\u1ebd \u0111\u01b0\u1ee3c t\u1ea3i v\u1ec1 m\u00e1y t\u00ednh c\u1ee7a b\u1ea1n.<\/p>\n\n\n\n<p>Gi\u1ea3i n\u00e9n file .zip n\u00e0y v\u00e0o m\u1ed9t th\u01b0 m\u1ee5c l\u00e0m vi\u1ec7c b\u1ea5t k\u1ef3.<\/p>\n\n\n\n<p>M\u1edf IDE y\u00eau th\u00edch c\u1ee7a b\u1ea1n (v\u00ed d\u1ee5: IntelliJ IDEA, Eclipse, VS Code) v\u00e0 import d\u1ef1 \u00e1n:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>IntelliJ IDEA:<\/strong> File -&gt; Open&#8230; -&gt; Tr\u1ecf \u0111\u1ebfn th\u01b0 m\u1ee5c v\u1eeba gi\u1ea3i n\u00e9n v\u00e0 ch\u1ecdn file pom.xml.<\/li>\n\n\n\n<li><strong>Eclipse:<\/strong> File -&gt; Import&#8230; -&gt; Existing Maven Projects -&gt; Tr\u1ecf \u0111\u1ebfn th\u01b0 m\u1ee5c g\u1ed1c c\u1ee7a d\u1ef1 \u00e1n.<\/li>\n\n\n\n<li><strong>VS Code:<\/strong> File -&gt; Open Folder&#8230; -&gt; Ch\u1ecdn th\u01b0 m\u1ee5c d\u1ef1 \u00e1n v\u1eeba gi\u1ea3i n\u00e9n.<\/li>\n<\/ul>\n\n\n\n<p>IDE s\u1ebd ti\u1ebfn h\u00e0nh import d\u1ef1 \u00e1n v\u00e0 t\u1ea3i v\u1ec1 c\u00e1c dependencies \u0111\u00e3 khai b\u00e1o trong pom.xml (qu\u00e1 tr\u00ecnh n\u00e0y c\u00f3 th\u1ec3 m\u1ea5t v\u00e0i ph\u00fat t\u00f9y thu\u1ed9c v\u00e0o t\u1ed1c \u0111\u1ed9 m\u1ea1ng c\u1ee7a b\u1ea1n).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-b\u01b0\u1edbc-3-t\u1ea1o-restcontroller-d\u01a1n-gi\u1ea3n\"><strong>B\u01b0\u1edbc 3: T\u1ea1o RestController \u0111\u01a1n gi\u1ea3n<\/strong><\/h3>\n\n\n\n<p>Trong IDE, t\u00ecm \u0111\u1ebfn th\u01b0 m\u1ee5c src\/main\/java v\u00e0 package g\u1ed1c c\u1ee7a b\u1ea1n (v\u00ed d\u1ee5: <code>com.example.hellospringapi<\/code>).<br>Nh\u1ea5p chu\u1ed9t ph\u1ea3i v\u00e0o package n\u00e0y v\u00e0 t\u1ea1o m\u1ed9t class Java m\u1edbi t\u00ean l\u00e0 <code>HelloController<\/code>.<\/p>\n\n\n\n<p>D\u00e1n \u0111o\u1ea1n m\u00e3 sau v\u00e0o file <code>HelloController.java<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.example.hellospringapi; \/\/ \u0110\u1ea3m b\u1ea3o package n\u00e0y kh\u1edbp v\u1edbi d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n\n\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RestController;\n\n@RestController \/\/ \u0110\u00e1nh d\u1ea5u class n\u00e0y l\u00e0 m\u1ed9t Controller x\u1eed l\u00fd c\u00e1c request REST\npublic class HelloController {\n\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/ \u00c1nh x\u1ea1 c\u00e1c HTTP GET request t\u1edbi \u0111\u01b0\u1eddng d\u1eabn \"\/hello\" v\u00e0o ph\u01b0\u01a1ng th\u1ee9c n\u00e0y\n&nbsp;&nbsp;&nbsp;&nbsp;@GetMapping(\"\/hello\")\n&nbsp;&nbsp;&nbsp;&nbsp;public String sayHello() {\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return \"Hello, World!\";\n&nbsp;&nbsp;&nbsp;&nbsp;}\n}<\/code><\/pre>\n\n\n\n<p><strong>Gi\u1ea3i th\u00edch ng\u1eafn:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>@RestController<\/code>: \u0110\u00e2y l\u00e0 m\u1ed9t annotation ti\u1ec7n l\u1ee3i k\u1ebft h\u1ee3p <code>@Controller<\/code> v\u00e0 <code>@ResponseBody<\/code>. N\u00f3 cho Spring bi\u1ebft r\u1eb1ng class n\u00e0y s\u1ebd x\u1eed l\u00fd c\u00e1c HTTP request \u0111\u1ebfn v\u00e0 c\u00e1c gi\u00e1 tr\u1ecb tr\u1ea3 v\u1ec1 t\u1eeb c\u00e1c ph\u01b0\u01a1ng th\u1ee9c s\u1ebd \u0111\u01b0\u1ee3c ghi tr\u1ef1c ti\u1ebfp v\u00e0o HTTP response body (thay v\u00ec t\u00ecm m\u1ed9t view \u0111\u1ec3 render).<\/li>\n\n\n\n<li><code>@GetMapping(\"\/hello\")<\/code>: Annotation n\u00e0y \u00e1nh x\u1ea1 c\u00e1c HTTP GET request c\u00f3 \u0111\u01b0\u1eddng d\u1eabn <code>\/hello<\/code> t\u1edbi ph\u01b0\u01a1ng th\u1ee9c <code>sayHello().<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-b\u01b0\u1edbc-4-ch\u1ea1y-\u1ee9ng-d\u1ee5ng-va-ki\u1ec3m-tra\"><strong>B\u01b0\u1edbc 4: Ch\u1ea1y \u1ee9ng d\u1ee5ng v\u00e0 Ki\u1ec3m tra<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>T\u00ecm \u0111\u1ebfn class ch\u00ednh c\u1ee7a \u1ee9ng d\u1ee5ng, th\u01b0\u1eddng c\u00f3 t\u00ean l\u00e0 <code>T\u00eanArtifactApplication.java<\/code> (v\u00ed d\u1ee5: <code>HelloSpringApiApplication.java<\/code>) n\u1eb1m trong package g\u1ed1c. Class n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u v\u1edbi annotation <code>@SpringBootApplication<\/code>.<br><\/li>\n\n\n\n<li>Ch\u1ea1y class n\u00e0y nh\u01b0 m\u1ed9t \u1ee9ng d\u1ee5ng Java b\u00ecnh th\u01b0\u1eddng (th\u01b0\u1eddng b\u1eb1ng c\u00e1ch nh\u1ea5p chu\u1ed9t ph\u1ea3i -> <code>Run 'HelloSpringApiApplication.main()'<\/code>).<br><\/li>\n\n\n\n<li>Spring Boot s\u1ebd kh\u1edfi \u0111\u1ed9ng embedded server (m\u1eb7c \u0111\u1ecbnh l\u00e0 Tomcat tr\u00ean port 8080). B\u1ea1n s\u1ebd th\u1ea5y c\u00e1c log t\u01b0\u01a1ng t\u1ef1 nh\u01b0 sau trong console: <code>Tomcat started on port(s): 8080 (http) with context path '' Started HelloSpringApiApplication in X.XXX seconds<\/code><br><\/li>\n\n\n\n<li>M\u1edf tr\u00ecnh duy\u1ec7t web ho\u1eb7c m\u1ed9t c\u00f4ng c\u1ee5 g\u1eedi request API (nh\u01b0 Postman ho\u1eb7c s\u1eed d\u1ee5ng curl tr\u00ean terminal) v\u00e0 truy c\u1eadp \u0111\u1ecba ch\u1ec9: <code>http:\/\/localhost:8080\/hello<\/code><br><\/li>\n\n\n\n<li><strong>K\u1ebft qu\u1ea3:<\/strong> B\u1ea1n s\u1ebd th\u1ea5y chu\u1ed7i &#8220;Hello, World!&#8221; hi\u1ec3n th\u1ecb tr\u00ean tr\u00ecnh duy\u1ec7t ho\u1eb7c trong ph\u1ea7n response body c\u1ee7a c\u00f4ng c\u1ee5 API. <code>http:\/\/localhost:8080\/hello<\/code><\/li>\n<\/ul>\n\n\n\n<p>V\u1eady l\u00e0 ch\u1ec9 v\u1edbi v\u00e0i b\u01b0\u1edbc \u0111\u01a1n gi\u1ea3n, nh\u1edd c\u00f3 Spring Initializr, b\u1ea1n \u0111\u00e3 kh\u1edfi t\u1ea1o v\u00e0 ch\u1ea1y th\u00e0nh c\u00f4ng m\u1ed9t \u1ee9ng d\u1ee5ng REST API v\u1edbi Spring Boot. V\u00ed d\u1ee5 n\u00e0y cho th\u1ea5y s\u1ee9c m\u1ea1nh c\u1ee7a vi\u1ec7c t\u1ef1 \u0111\u1ed9ng h\u00f3a c\u1ea5u h\u00ecnh ban \u0111\u1ea7u, gi\u00fap b\u1ea1n t\u1eadp trung ngay v\u00e0o vi\u1ec7c vi\u1ebft logic cho \u1ee9ng d\u1ee5ng.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cac-cau-h\u1ecfi-th\u01b0\u1eddng-g\u1eb7p-v\u1ec1-spring-initializr\"><span class=\"ez-toc-section\" id=\"Cac_cau_hoi_thuong_gap_ve_Spring_Initializr\"><\/span><strong>C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 Spring Initializr<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-spring-initializr-co-mi\u1ec5n-phi-khong-va-ai-la-ng\u01b0\u1eddi-duy-tri-no\"><strong>Spring Initializr c\u00f3 mi\u1ec5n ph\u00ed kh\u00f4ng v\u00e0 ai l\u00e0 ng\u01b0\u1eddi duy tr\u00ec n\u00f3?<\/strong><\/h3>\n\n\n\n<p>Ho\u00e0n to\u00e0n mi\u1ec5n ph\u00ed! Spring Initializr l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 m\u00e3 ngu\u1ed3n m\u1edf \u0111\u01b0\u1ee3c cung c\u1ea5p v\u00e0 duy tr\u00ec b\u1edfi \u0111\u1ed9i ng\u0169 Spring (thu\u1ed9c VMware), nh\u1eefng ng\u01b0\u1eddi \u0111\u1ee9ng sau Spring Framework v\u00e0 Spring Boot.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-nen-ch\u1ecdn-maven-hay-gradle-cho-d\u1ef1-an-c\u1ee7a-minh\"><strong>N\u00ean ch\u1ecdn Maven hay Gradle cho d\u1ef1 \u00e1n c\u1ee7a m\u00ecnh?<\/strong><\/h3>\n\n\n\n<p>C\u1ea3 Maven v\u00e0 Gradle \u0111\u1ec1u l\u00e0 nh\u1eefng c\u00f4ng c\u1ee5 x\u00e2y d\u1ef1ng (build tool) m\u1ea1nh m\u1ebd.&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Maven:<\/strong> S\u1eed d\u1ee5ng XML \u0111\u1ec3 c\u1ea5u h\u00ecnh, r\u1ea5t ph\u1ed5 bi\u1ebfn trong c\u1ed9ng \u0111\u1ed3ng Java, c\u00f3 h\u1ec7 sinh th\u00e1i l\u1edbn v\u00e0 th\u01b0\u1eddng d\u1ec5 ti\u1ebfp c\u1eadn h\u01a1n cho ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u.&nbsp;<\/li>\n\n\n\n<li><strong>Gradle:<\/strong> S\u1eed d\u1ee5ng Groovy ho\u1eb7c Kotlin DSL cho file c\u1ea5u h\u00ecnh, mang l\u1ea1i s\u1ef1 linh ho\u1ea1t cao h\u01a1n, c\u00f3 th\u1ec3 cho t\u1ed1c \u0111\u1ed9 build nhanh h\u01a1n \u1edf c\u00e1c d\u1ef1 \u00e1n l\u1edbn v\u00e0 ph\u1ee9c t\u1ea1p.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>N\u1ebfu b\u1ea1n m\u1edbi b\u1eaft \u0111\u1ea7u ho\u1eb7c d\u1ef1 \u00e1n kh\u00f4ng qu\u00e1 ph\u1ee9c t\u1ea1p, Maven l\u00e0 m\u1ed9t l\u1ef1a ch\u1ecdn t\u1ed1t. N\u1ebfu b\u1ea1n c\u1ea7n s\u1ef1 t\u00f9y bi\u1ebfn cao ho\u1eb7c \u0111\u00e3 quen v\u1edbi Gradle, \u0111\u00f3 c\u0169ng l\u00e0 m\u1ed9t l\u1ef1a ch\u1ecdn tuy\u1ec7t v\u1eddi. Spring Initializr h\u1ed7 tr\u1ee3 c\u1ea3 hai.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-toi-co-th\u1ec3-s\u1eed-d\u1ee5ng-phien-b\u1ea3n-th\u01b0-vi\u1ec7n-dependency-khac-v\u1edbi-phien-b\u1ea3n-d\u01b0\u1ee3c-qu\u1ea3n-ly-b\u1edfi-spring-boot-khong\"><strong>T\u00f4i c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng phi\u00ean b\u1ea3n th\u01b0 vi\u1ec7n (dependency) kh\u00e1c v\u1edbi phi\u00ean b\u1ea3n \u0111\u01b0\u1ee3c qu\u1ea3n l\u00fd b\u1edfi Spring Boot kh\u00f4ng?<\/strong><\/h3>\n\n\n\n<p>C\u00f3, b\u1ea1n ho\u00e0n to\u00e0n c\u00f3 th\u1ec3. Spring Boot qu\u1ea3n l\u00fd m\u1ed9t danh s\u00e1ch c\u00e1c phi\u00ean b\u1ea3n th\u01b0 vi\u1ec7n t\u01b0\u01a1ng th\u00edch trong &#8220;Bill of Materials&#8221; (BOM) c\u1ee7a n\u00f3 \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o m\u1ecdi th\u1ee9 ho\u1ea1t \u0111\u1ed9ng tr\u01a1n tru. Tuy nhi\u00ean, n\u1ebfu b\u1ea1n c\u00f3 l\u00fd do c\u1ee5 th\u1ec3 \u0111\u1ec3 s\u1eed d\u1ee5ng m\u1ed9t phi\u00ean b\u1ea3n kh\u00e1c, b\u1ea1n c\u00f3 th\u1ec3 ghi \u0111\u00e8 phi\u00ean b\u1ea3n \u0111\u00f3 tr\u1ef1c ti\u1ebfp trong file <code>pom.xml<\/code> (\u0111\u1ed1i v\u1edbi Maven) ho\u1eb7c <code>build.gradle<\/code> (\u0111\u1ed1i v\u1edbi Gradle) c\u1ee7a m\u00ecnh.<\/p>\n\n\n\n<p>Nh\u01b0ng h\u00e3y c\u1ea9n th\u1eadn v\u00ec \u0111i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 d\u1eabn \u0111\u1ebfn xung \u0111\u1ed9t phi\u00ean b\u1ea3n ho\u1eb7c c\u00e1c v\u1ea5n \u0111\u1ec1 t\u01b0\u01a1ng th\u00edch kh\u00f4ng mong mu\u1ed1n. N\u00f3i chung, n\u00ean \u01b0u ti\u00ean s\u1eed d\u1ee5ng c\u00e1c phi\u00ean b\u1ea3n \u0111\u01b0\u1ee3c Spring Boot qu\u1ea3n l\u00fd.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-t\u1ed5ng-k\u1ebft\"><span class=\"ez-toc-section\" id=\"Tong_ket\"><\/span><strong>T\u1ed5ng k\u1ebft<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Qua b\u00e0i vi\u1ebft n\u00e0y, hy v\u1ecdng b\u1ea1n \u0111\u00e3 th\u1ea5y r\u00f5 s\u1ee9c m\u1ea1nh v\u00e0 s\u1ef1 ti\u1ec7n l\u1ee3i c\u1ee7a Spring Initializr. T\u1eeb vi\u1ec7c t\u1ef1 \u0111\u1ed9ng h\u00f3a c\u1ea5u h\u00ecnh, qu\u1ea3n l\u00fd dependencies d\u1ec5 d\u00e0ng cho \u0111\u1ebfn vi\u1ec7c t\u1ea1o ra m\u1ed9t b\u1ed9 khung d\u1ef1 \u00e1n chu\u1ea9n ch\u1ec9nh &#8220;trong nh\u00e1y m\u1eaft&#8221;, Spring Initializr th\u1ef1c s\u1ef1 l\u00e0 c\u00f4ng c\u1ee5 kh\u00f4ng th\u1ec3 thi\u1ebfu cho m\u1ecdi l\u1eadp tr\u00ecnh vi\u00ean Spring Boot.<\/p>\n\n\n\n<p>N\u00f3 gi\u00fap ch\u00fang ta ti\u1ebft ki\u1ec7m th\u1eddi gian qu\u00fd b\u00e1u, gi\u1ea3m thi\u1ec3u l\u1ed7i v\u00e0 t\u1eadp trung ho\u00e0n to\u00e0n v\u00e0o vi\u1ec7c ph\u00e1t tri\u1ec3n logic nghi\u1ec7p v\u1ee5 c\u1ed1t l\u00f5i. Thay v\u00ec loay hoay v\u1edbi c\u00e1c b\u01b0\u1edbc thi\u1ebft l\u1eadp ban \u0111\u1ea7u, b\u1ea1n \u0111\u00e3 c\u00f3 th\u1ec3 b\u1eaft tay ngay v\u00e0o vi\u1ec7c ph\u00e1t tri\u1ec3n d\u1ef1 \u00e1n c\u1ee7a m\u00ecnh.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n Spring Boot m\u1edbi \u0111\u00f4i khi khi\u1ebfn b\u1ea1n m\u1ea5t th\u1eddi gian v\u1edbi c\u00e1c thi\u1ebft l\u1eadp ban \u0111\u1ea7u? Spring Initializr ch\u00ednh l\u00e0 gi\u1ea3i ph\u00e1p! C\u00f4ng c\u1ee5 m\u1ea1nh m\u1ebd \u0111\u01b0\u1ee3c cung c\u1ea5p b\u1edfi \u0111\u1ed9i ng\u0169 Spring gi\u00fap b\u1ea1n t\u1ea1o b\u1ed9 khung d\u1ef1 \u00e1n ch\u1ec9 trong v\u00e0i c\u00fa nh\u1ea5p chu\u1ed9t, v\u1edbi \u0111\u1ea7y \u0111\u1ee7 c\u1ea5u h\u00ecnh [&hellip;]<\/p>\n","protected":false},"author":203,"featured_media":88891,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_gspb_post_css":"","footnotes":""},"categories":[109],"tags":[],"class_list":["post-88880","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chuyen-mon-it"],"blocksy_meta":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.8 (Yoast SEO v27.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Spring Initializr l\u00e0 g\u00ec: C\u00e1ch kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n Spring Boot nhanh ch\u00f3ng - ITviec Blog<\/title>\n<meta name=\"description\" content=\"Xem ngay h\u01b0\u1edbng d\u1eabn chi ti\u1ebft t\u1ea1o d\u1ef1 \u00e1n Spring Boot d\u1ec5 d\u00e0ng v\u1edbi Spring Initializr k\u00e8m v\u00ed d\u1ee5 th\u1ef1c t\u1ebf, c\u00f9ng t\u00f9y ch\u1ecdn kh\u00e1c c\u1ee7a Spring Initializr.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/\" \/>\n<meta property=\"og:locale\" content=\"vi_VN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Initializr l\u00e0 g\u00ec: C\u00e1ch kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n Spring Boot nhanh ch\u00f3ng\" \/>\n<meta property=\"og:description\" content=\"Kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n Spring Boot m\u1edbi \u0111\u00f4i khi khi\u1ebfn b\u1ea1n m\u1ea5t th\u1eddi gian v\u1edbi c\u00e1c thi\u1ebft l\u1eadp ban \u0111\u1ea7u? Spring Initializr ch\u00ednh l\u00e0 gi\u1ea3i ph\u00e1p! C\u00f4ng c\u1ee5 m\u1ea1nh m\u1ebd \u0111\u01b0\u1ee3c cung\" \/>\n<meta property=\"og:url\" content=\"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/\" \/>\n<meta property=\"og:site_name\" content=\"ITviec Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ITviec\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-01T15:37:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-01T15:37:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/spring-initializr-vippro-scaled.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1347\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Tien Tran\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ITviec\" \/>\n<meta name=\"twitter:site\" content=\"@ITviec\" \/>\n<meta name=\"twitter:label1\" content=\"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tien Tran\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc\" \/>\n\t<meta name=\"twitter:data2\" content=\"29 ph\u00fat\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Spring Initializr l\u00e0 g\u00ec: C\u00e1ch kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n Spring Boot nhanh ch\u00f3ng - ITviec Blog","description":"Xem ngay h\u01b0\u1edbng d\u1eabn chi ti\u1ebft t\u1ea1o d\u1ef1 \u00e1n Spring Boot d\u1ec5 d\u00e0ng v\u1edbi Spring Initializr k\u00e8m v\u00ed d\u1ee5 th\u1ef1c t\u1ebf, c\u00f9ng t\u00f9y ch\u1ecdn kh\u00e1c c\u1ee7a Spring Initializr.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/","og_locale":"vi_VN","og_type":"article","og_title":"Spring Initializr l\u00e0 g\u00ec: C\u00e1ch kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n Spring Boot nhanh ch\u00f3ng","og_description":"Kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n Spring Boot m\u1edbi \u0111\u00f4i khi khi\u1ebfn b\u1ea1n m\u1ea5t th\u1eddi gian v\u1edbi c\u00e1c thi\u1ebft l\u1eadp ban \u0111\u1ea7u? Spring Initializr ch\u00ednh l\u00e0 gi\u1ea3i ph\u00e1p! C\u00f4ng c\u1ee5 m\u1ea1nh m\u1ebd \u0111\u01b0\u1ee3c cung","og_url":"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/","og_site_name":"ITviec Blog","article_publisher":"https:\/\/www.facebook.com\/ITviec","article_published_time":"2025-07-01T15:37:14+00:00","article_modified_time":"2025-07-01T15:37:17+00:00","og_image":[{"width":2560,"height":1347,"url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/spring-initializr-vippro-scaled.png","type":"image\/png"}],"author":"Tien Tran","twitter_card":"summary_large_image","twitter_creator":"@ITviec","twitter_site":"@ITviec","twitter_misc":{"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi":"Tien Tran","\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc":"29 ph\u00fat"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/#article","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/"},"author":{"name":"Tien Tran","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/1595d671c49cfa2a48cd3c0a047a1298"},"headline":"Spring Initializr l\u00e0 g\u00ec: C\u00e1ch kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n Spring Boot nhanh ch\u00f3ng","datePublished":"2025-07-01T15:37:14+00:00","dateModified":"2025-07-01T15:37:17+00:00","mainEntityOfPage":{"@id":"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/"},"wordCount":7533,"publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"image":{"@id":"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/spring-initializr-vippro-scaled.png","articleSection":["Chuy\u00ean m\u00f4n IT"],"inLanguage":"vi"},{"@type":"WebPage","@id":"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/","url":"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/","name":"Spring Initializr l\u00e0 g\u00ec: C\u00e1ch kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n Spring Boot nhanh ch\u00f3ng - ITviec Blog","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/#primaryimage"},"image":{"@id":"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/spring-initializr-vippro-scaled.png","datePublished":"2025-07-01T15:37:14+00:00","dateModified":"2025-07-01T15:37:17+00:00","description":"Xem ngay h\u01b0\u1edbng d\u1eabn chi ti\u1ebft t\u1ea1o d\u1ef1 \u00e1n Spring Boot d\u1ec5 d\u00e0ng v\u1edbi Spring Initializr k\u00e8m v\u00ed d\u1ee5 th\u1ef1c t\u1ebf, c\u00f9ng t\u00f9y ch\u1ecdn kh\u00e1c c\u1ee7a Spring Initializr.","breadcrumb":{"@id":"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/#breadcrumb"},"inLanguage":"vi","potentialAction":[{"@type":"ReadAction","target":["https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/"]}]},{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/#primaryimage","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/spring-initializr-vippro-scaled.png","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/spring-initializr-vippro-scaled.png","width":800,"height":421,"caption":"Spring Initializr l\u00e0 g\u00ec - itviec blog"},{"@type":"BreadcrumbList","@id":"https:\/\/itviec.com\/blog\/spring-initializr-la-gi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Chuy\u00ean m\u00f4n IT","item":"https:\/\/itviec.com\/blog\/chuyen-mon-it\/"},{"@type":"ListItem","position":2,"name":"Spring Initializr l\u00e0 g\u00ec: C\u00e1ch kh\u1edfi t\u1ea1o d\u1ef1 \u00e1n Spring Boot nhanh ch\u00f3ng"}]},{"@type":"WebSite","@id":"https:\/\/itviec.com\/blog\/#website","url":"https:\/\/itviec.com\/blog\/","name":"ITviec Blog","description":"IT Jobs &amp; People in Vietnam","publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/itviec.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"vi"},{"@type":"Organization","@id":"https:\/\/itviec.com\/blog\/#organization","name":"ITviec","url":"https:\/\/itviec.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","width":1800,"height":1800,"caption":"ITviec"},"image":{"@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/ITviec","https:\/\/x.com\/ITviec","https:\/\/www.linkedin.com\/company\/itviec","https:\/\/www.youtube.com\/channel\/UCYthAQ3bcGr57M_ag5gHDvQ"]},{"@type":"Person","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/1595d671c49cfa2a48cd3c0a047a1298","name":"Tien Tran","image":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/05\/tien-tran-author-e1715658627643-100x100.jpg","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/05\/tien-tran-author-e1715658627643-100x100.jpg","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/05\/tien-tran-author-e1715658627643-100x100.jpg","caption":"Tien Tran"},"url":"https:\/\/itviec.com\/blog\/author\/tien-tran\/"}]}},"_links":{"self":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/88880","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/users\/203"}],"replies":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/comments?post=88880"}],"version-history":[{"count":3,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/88880\/revisions"}],"predecessor-version":[{"id":88893,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/88880\/revisions\/88893"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media\/88891"}],"wp:attachment":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media?parent=88880"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/categories?post=88880"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/tags?post=88880"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}