Xin chào mừng bạn đã ghé thăm blog của Nguyễn Văn Tiến!.Chúc bạn sức khỏe, niềm vui và an lành!.

Thứ Tư, 19 tháng 10, 2016









TÀI LIỆU TÌM HIỂU VỀ KAFKA VÀ VẤN ĐỀ LIÊN QUAN






NỘI DUNG

1.      Kafka

1.1.          Bài toán đặt ra

Xét một ví dụ đơn giản, trong thương mại điện tử có hai giao dịch xảy ra lần lượt là: xác nhận đơn hàng và hủy đơn hàng. Các trạng thái này chuyển thành các message và gửi lần lượt vào hệ thống để xử lý. Nhưng nếu message hủy lại được xử lý xong trước, như vậy message xác nhận xử lý sau thì sẽ gây ra lỗi về luồng nghiệp vụ. Vì việc hủy được thực hiện xong trước dẫn đến việc xác nhận đơn hàng không còn dữ liệu để thực hiện.

1.2.          Message queue

Vì hiển nhiên queue thì phải FIFO, nên thứ tự vào - ra được đảm bảo rồi. Cái gì vào trước thì ra trước. Tất cả các message queue đều đảm bảo điều đó.
Nhưng thứ tự mà người thiết kế mong muốn không chỉ đơn giản thứ tự vào ra mà còn là thứ tự của các quá trình xử lý nối tiếp nhau, dữ liệu vào trước sẽ được xử lý trước. Hệ thống giao dịch chứng khoán hay giao dịch thương mại chính là ví dụ điển hình cho việc cần phải thiết kế hệ thống sao cho các quá trình xử lý nối tiếp nhau. Kafka ngoài việc đảm bảo được yếu tố FIFO của message queue, thì có còn đảm bảo được thứ tự xử lý nối tiếp của dữ liệu.

1.3.          Message broker

Một giải pháp thường được áp dụng trước đây là lưu dữ liệu vào các temporary table trong database. Tần xuất trao đổi message cao sẽ làm tăng load của database, giảm performance đáng kể. Trong môi trường multithread, database cần có cơ chế lock. Lock cũng làm giảm performance.
Giải pháp ở đây là thay vì các liên kết trực tiếp, thay vì các thành phần phải biết nhau thì sử dụng một liên kết trung gian qua một broker(message broker).
Với sự tham gia của broker(message broker), thì producer sẽ không hề biết consumer. Producer chỉ việc gửi message đến các queue trong broker(message broker), consumer chỉ việc đăng ký nhận message từ các queue này. Việc producer và consumer có nhiều khác nhau về system, environtment, language code,… thì vẫn có thể truyền-nhận thông tin một cách dễ dàng. Ngoài ra, đảm bảo được các yếu tố về security khi mà nguồn gửi và nguồn nhận không biết nhau.
Ví dụ: Hệ thống lưu trữ và xử lý log, hệ thống giao dịch chứng khoán.

1.4.          Khái niệm về Kafka

Kafka là một hệ thống xử lý message hàng đợi(message queue), nhằm thu thập dữ liệu đầu vào, được xây dựng theo cơ chế publish-subscribe , thông qua các brokers khi mà các nguồn cung cấp(producer) và nguồn tiếp nhận (consumer) không biết nhau.
Mã nguồn Kafka được thiết kế cho việc xử lý dữ liệu lớn khi đọc/ghi dữ liệu, giảm độ trễ trong quá trình truyền tải dữ liệu.
Hỗ trợ triển khai hệ thống thu thập, xử lý dữ liệu theo các mô hình:
·        Phân tán(distribute)
·        Phân chia(partion)
·        Đồng bộ(replicate)

1.5.           Cơ chế hoạt động

Kafka thường được triển khai theo mô hình cluster (tham khảo phần 2 – mô hình Clusering).

1.5.1.     Một số khái niệm

Topic: mỗi dữ liệu đến hệ thống sẽ thuộc một nhóm dữ liệu đặc thù được gọi là topic.
Partitions: Một topic có một hoặc nhiều partition.
Partitiion offset: Mỗi một partitioned message là duy nhất và được đánh số id, được gọi là offset.
Replicas (Replicas of partition): Là một bản backup dữ liệu của partition, được sử dụng để phòng tránh việc mất dữ liệu. Nó không được đọc và ghi dữ liệu.
Broker: là 1 node trong cluster(1 node trong cluster là một cluser server). Mỗi broker có thể quản lý hàng trăm megabyte đọc/ghi dữ liệu một giây từ hàng nghìn người dùng một lúc. Một cluster có thể mở rộng một cách linh động mà không gây ra tình trạng dừng hệ thống.
+ Nếu hệ thống có simple-broker: mỗi simple-broker sẽ có từ 0 hoặc nhiều partitions trong mỗi topic.
+ Nếu hệ thống có N partitions và có N broker thì trong 1 topic thì mỗi broker sẽ có 1 partitions.
+ Nếu hệ thống có N partitions và có (N + M) broker thì N broker đầu tiên, mỗi broker sẽ có 1 partitions, các broker khác sẽ không có partitions.
+ Nếu hệ thống có N partitions và có (N-M) broker thì một broker sẽ có 1 hoặc nhiều partitions. Việc này không được khuyến cáo do việc phân phối tải không đồng đều giữa các broker.
Leader (Kafka broker master): Là một node thực hiện tất cả các việc dọc và ghi dữ liệu cho các partition. Trong N partition trong Kafka cluster sẽ có một máy chủ (Kafka broker) hoạt động như là leader.
Follower: Là những node khác node leader, một khi node leader hỏng thì một Follower sẽ được lựa chọn làm node leader. Nó hoạt động như một consumer bình thường, thực hiện cơ chế pull dữ liệu và lưu trữ dữ liệu cho riêng nó.
Procuder: Hệ thống gởi dữ liệu đến Kafka.
Consumer: Hệ thống tiếp nhận đầu ra từ Kafka.
Zookeeper trong Apache Kafka: Được sử dụng để quản lý và điều phối các Kafka broker.
+ Zookeeper được sử dụng chủ yếu cho việc thông báo cho procuder và consumer biết thông tin của một broker mới thêm vào hoặc thông tin của một Kafka broker lỗi trong hệ thống Kafka system.
+ Sau mỗi thông báo của Zookeeper về việc broker thêm vào hay broker bị lỗi thì procuder và consumer sẽ quyết định và bắt đầu phối hợp với một broker khác.
Việc truyền tải dữ liệu giữa các hệ thống khác với Kafka broker được thực hiện thông qua giao thức TCP; việc phát triển, phân tích dữ liệu có thể thực hiện trên nhiều nền tảng ngôn ngữ lập trình khác nhau.

1.5.2.     Cơ chế hoạt động

Như hình trên, ta có bốn phân vùng dữ liệu trong một topic. Các phân vùng có thể dịch chuyển trên các máy chủ khác nhau, và các topic có thể mở rộng một cách dễ dàng. Mỗi phân vùng dữ liệu có thể được đồng bộ sang một broker khác để tăng tính sẵn sàng của dữ liệu.
-         Các hệ thống produccer có thể thực hiện ghi dữ liệu vào các phân vùng dữ liệu theo cơ chế round-robin (tham khảo phần 3 – hệ thống cân bằng tải).
Trong trường hợp có nhiều producer, mỗi producer có thể chọn ngẫu nhiên một phân vùng để tiến hành ghi dữ liệu, việc này sẽ làm giảm số lượng kết nối đến mỗi broker.
-         Việc phân vùng dữ liệu cho phép những consumer đọc dữ liệu từ những phần khác nhau của một topic; hệ thống comsumer có thể đọc dữ liệu theo cơ chế round-robin(tham khảo phần 3 – hệ thống cân bằng tải) giữa các broker khác nhau để phục vụ mục đích cân bằng tải cho hệ thống.
Kafka thực hiện lưu trữ các dữ liệu vào ố cứng và sao chép một bản tương tự để tăng khả năng chịu lỗi của hệ thống.
-         Apache Kafka bao gồm Java client và Scala client trong việc liên kết với Kafka cluster.

1.5.3.     Sự phụ thuộc của Apache Kafka vào Zookeeper

Các thông tin của Zookeeper server được chỉa sẻ qua một cụm Zookeeper cluster. Các thông tin cơ bản của Apache Kafka được lưu trữ trong Zookeeper như: thông tin về các topic, brokers, consumer offset, ….
Tất cả các thông tin được lưu trữ trong Zookeeper sẽ được đồng bộ dữ liệu giữa các server trong cụm Zookeeper.
Một khi xảy ra lỗi tại Kafka broker/Zookeeper thì sẽ không làm ảnh hưởng đến trạng thái của Kafka cluster. Dữ liệu sẽ được khôi phục ngay lập tức khi một Zookeeper được restart, Kafka sẽ không có thời gian chết. Một Kafka broker master mới được Zookeeper server lựa chọn lại khi Kafka broker master bị hỏng.
**** Dưới đây là phần tham khảo các vấn đề liên quan

2.      Mô hình Clusering

2.1.          Bài toán đặt ra

Chúng ta đều biết các máy chủ là trái tim của của mạng máy tính, nếu máy chủ mạng hỏng, hoạt động của hệ thống sẽ bị ngưng trệ. Điều đáng tiếc là dù các hãng sản xuất đã cố gắng làm mọi cách để nâng cao chất lượng của thiết bị, nhưng những hỏng hóc đối với các thiết bị mạng nói chung và các máy chủ nói riêng là điều không thể tránh khỏi.
Do vậy, vấn đề đặt ra là cần có một giải pháp để đảm bảo cho hệ thống vẫn hoạt động tốt ngay cả khi có sự cố xảy ra đối với máy chủ mạng, và công nghệ clustering là câu trả lời cho vấn đề này. Đề tài này giới thiệu nguyên lý, phân tích và triển khai một số giải pháp clustering đang được áp dụng cho các hệ thống mạng máy tính lớn với hi vọng có thể giúp chúng ta hiểu rõ hơn về công nghệ tưởng như đơn giản nhưng thực tế khá phức tạp này.

2.2.          Công nghệ Clustering

Clustering là một kiến trúc nhằm đảm bảo nâng cao khả năng sẵn sàng cho các hệ thống mạng máy tính.
Clustering cho phép sử dụng nhiều máy chủ kết hợp với nhau tạo thành một cụm có khả năng chịu đựng hay chấp nhận sai sót (fault-tolerant) nhằm nâng cao độ sẵn sàng của hệ thống mạng.
Cluster là một hệ thống bao gồm nhiều máy chủ được kết nối với nhau theo dạng song song hay phân tán và được sử dụng như một tài nguyên thống nhất.
Mô hình song song
Mô hình phân tán
Nếu một máy chủ ngừng hoạt động do bị sự cố hoặc để nâng cấp, bảo trì, thì toàn bộ công việc mà máy chủ này đảm nhận sẽ được tự động chuyển sang cho một máy chủ khác (trong cùng một cluster) mà không làm cho hoạt động của hệ thống bị ngắt hay gián đoạn. Quá trình này gọi là “fail-over”; và việc phục hồi tài nguyên của một máy chủ trong hệ thống (cluster) được gọi là “fail-back”.
Việc thiết kế và lắp đặt các cluster cần thoả mãn các yêu cầu sau:
·        Yêu cầu về tính sẵn sàng cao (High availability).
·        Yêu cầu về độ tin cậy cao (reliability).
·        Yêu cầu về khả năng mở rộng được (scalability).
Ba yêu cầu trên được gọi tắt là RAS (ReliabilityAvailabilityScalability), những hệ thống đáp ứng được ba yêu cầu trên được gọi là hệ thống RAS (cần phân biệt với Remote Access Service là dịch vụ truy cập từ xa).
Kỹ thuật Clustering được chia làm 2 loại:
·        Cluster: sử dụng phía backend(trong tài liệu này phần 1 sử dụng kỹ thuật Cluster này)
·         Network Load Balancing (NLB): sử dụng phía frontend
Node: Là một server thuộc một Cluster nào đó mà trên đó các ứng dụng, một hệ thống Cluster gồm nhiều node.

3.      Hệ thống cân bằng tải

3.1.          Khái niệm cân bằng tải

Cân bằng tải là một phương pháp phân phối khối lượng tải trên nhiều máy tính hoặc một cụm máy tính để có thể sử dụng tối ưu các nguồn lực, tối đa hóa thông lượng, giảm thời gian đáp ứng và tránh tình trạng quá tải trên máy chủ.

3.2.          Các lợi ích khi sử dụng phương pháp cân bằng tải

-         Tăng khả năng đáp ứng, tránh tình trạng quá tải trên máy chủ
-         Tăng độ tin cậy và khả năng dự phòng cho hệ thống:
-         Tăng tính bảo mật cho hệ thống

3.3.          Các thuật toán cân bằng tải

Có rất nhiều thuật toán cân bằng tải được sử dụng, sau đây là các thuật toán cân bằng tải phổ biến nhất:
Thuật toán Round Robin:
Đây gọi là thuật toán luân chuyển vòng, các máy chủ sẽ được xem ngang hàng và sắp xếp theo một vòng quay. Các truy vấn dịch vụ sẽ lần lượt được gửi tới các máy chủ theo thứ tự sắp xếp.
Ví dụ:
 Cấu hình một cụm Cluster bao gồm 03 máy chủ: A, B, C.
Yêu cầu dịch vụ thứ nhất sẽ được gửi đến máy chủ A.
Yêu cầu dịch vụ thứ hai sẽ được gửi đến máy chủ B.
Yêu cầu dịch vụ thứ ba sẽ được gửi đến máy chủ C.
Yêu cầu dịch vụ thứ tư sẽ lại được gửi cho máy chủ A….
Thuật toán Weighted Round Robin:
Bản chất giống như thuật toán Round Robin, tuy nhiên chúng ta có thể cấu hình cho một máy chủ nào đó thường xuyên được sử dụng hơn.
Thuật toán Least Connection:
Đây là thuật toán dựa trên tính toán số lượng kết nối để thực hiện cân bằng tải cho máy chủ, nó sẽ tự động lựa chọn máy chủ với số lượng kết nối đang hoạt động là nhỏ nhất.
Thuật toán Weights Least Connection:
Bản chất giống thuật toán Least Connection, nhưng chúng ta có thể cấu hình ưu tiên cho một máy chủ trong cụm máy chủ hoạt động.
Thuật toán Least Response Time:
Đây là thuật toán sử dụng phương pháp thời gian đáp ứng ít nhất, lựa chọn dịch vụ trên máy chủ với thời gian đáp ứng là thấp nhất.
Ngoài ra còn có rất nhiều thuật toán cân bằng tải khác tùy theo phần mềm hoặc phần cứng cân bằng tải được sử dụng.

4.     Cơ chế publish-subscribe

4.1.          Bài toán về vấn đề Realtime (cập nhật thời gian thực)

Ví dụ: các ứng dụng Chat hiện tại, việc giao tiếp giữa những người chat với nhau đòi hỏi thông tin phải cập nhật liên tục và tự động đẩy đến cho các người dùng còn lại. Hay việc cần thống báo đến các bên liên quan khi hệ thống có dữ liệu mới được thêm vào.
Hiện tại có rất nhiều cơ chế được các DB hỗ trợ việc này như:
·        RabitMQ: cung cấp cơ chế message system.
·        RethinkDB: cung cấp cơ chế hỗ trợ Realtime dễ dàng cho lập trình viên – dựa trên message system nhưng được chú trọng xây dựng.
·        Redis: cung cấp cơ chế Pub/Sub.

4.2.          Khái niệm về Redis

Redis là hệ thống lưu trữ key-value với rất nhiều tính năng và được sử dụng rộng rãi.
Redis nổi bật bởi việc hỗ trợ nhiều cấu trúc dữ liệu cơ bản (hash, list, set, sorted set, string), đồng thời cho phép scripting bằng ngôn ngữ lua.
Bên cạnh lưu trữ key-value trên RAM với hiệu năng cao, redis còn hỗ trợ lưu trữ dữ liệu trên đĩa cứng (persistent redis) cho phép phục hồi dữ liệu khi gặp sự cố. Ngoài tính năng replicatation (sao chép giữa master-client), tính năng cluster (sao lưu master-master) cũng đang được phát triển .
Để sử dụng một cách hiệu quả những tính năng redis hỗ trợ cũng như vận hành redis với hiệu suất cao nhất thì việc am hiểu hệ thống lưu trữ này là rất quan trọng.

4.3.          Cơ chế PUB/SUB trong Redis

Cơ chế PUB/SUB gồm:
·        PUB (PUBLISH): Đẩy dữ liệu vào 1 kênh.
·        SUB (SUBSCRIBE): Đăng kí vào 1 kênh.
Nếu hiểu đơn giản thì hình dung như ta đăng kí vào 1 kênh truyền hình nào đó, khi đài truyền hình đẩy về kênh đó các dữ liệu, ta không cần làm gì cả dữ liệu vẫn luôn được tự cập nhật.
Trong Redis cơ chế này cũng y như vậy thôi các bạn, khi các bạn đăng kí vào 1 kênh, khi dữ liệu được đẩy vào kênh này bạn sẽ nhận được dữ liệu mới.
pub_sub
Sử dụng đặc tính này cho bài toán cập nhật số các bản tin mới được thêm vào cho người dùng một cách tự động.
Ta thực hiện việc đặt người dùng(SUB) vào 1 kênh (ở đây kênh này là số bản tin mới). Thì khi có một bản tin được thêm vào hệ thống Redis sẽ tự động phát sinh sự kiện (PUB), sự kiện(PUB) này chúng ta có thể bắt được nhờ vào Redis cung cấp, ta thực hiện xử lý số liệu để cập nhật cho người dùng.

5.     Zookeeper

5.1.          Khái niệm

Zookeeper là 1 dịch vụ tập trung để duy trì thông tin cấu hình, đặt tên, cung cấp sự đồng bộ phân tán và cung cấp các dịch vụ nhóm.
Nói cách khác, Zookeeper là 1 dịch vụ đồng bộ hóa nhân rộng (replicated synchronization service) với sự nhất quán cuối cùng. Trong một hệ thống cluster có nhiều nodes khác nhau và 1 node đóng vai trò là master. Giả sử master node lỗi với bất kỳ lý do gì. Trong trường hợp này, vai trò của master node được chuyển cho 1 node khác. Vai trò chính của master node là quản lý việc ghi (writer) theo thứ tự. Zookeeper sẽ gán mater node mới và đảm bảo rằng hệ thống cluster thực hiện tiếp xử lý mà không gặp vấn đề.

5.2.          Vai trò

·        Zookeeper quản lý toàn bộ quy trình (workflow) việc khởi động (start) và dừng (stop) các nodes khác nhau trong cluster.
·        Trong cluster khi bất kỳ xử lý nào cần cấu hình để hoàn thành tác vụ. Zookeeper đảm bảo node đó được cấu hình nhất quán.
·         Trong trường hợp master node lỗi, Zookeeper có thể gán master node mới và đảm bảo cluster làm việc bình thường.

Tài liệu tham khảo:
Tiếng Việt:
https://viblo.asia/visudoblog/posts/amoG818Ovz8P
http://kipalog.com/posts/Tim-hieu-ve-apache-kafka
Tiếng Anh:
https://www.tutorialspoint.com/apache_kafka/index.htm
Demo running apache Kafka for windows:
https://dzone.com/articles/running-apache-kafka-on-windows-os

Tài liệu chia sẻ cho Cộng đồng Dev, 
Xin vui lòng ghi rõ nguồn dẫn nếu có ý định dùng lại ^_^

Tài liệu tìm hiểu về Kafka và các vấn đề liên quan


Thứ Năm, 22 tháng 9, 2016

[Spring Framework] - Giới thiệu về Spring Framework

Nội dung bài viết:
  1. Ciới thiệu về Spring Framework.
  2. Thành phẩn của Spring Framework
  3. Lý do sử dụng
  4. Sơ đồ luồng đi của chương trình
  5. Download demo
  6. Tài liệu tham khảo.

1. GIỚI THIỆU VỀ SPRING FRAMEWORK

Spring Framework(gọi tắt Spring), là một framework mã nguồn mở được viết bằng Java. Nó được xem như là một giải pháp kiến trúc tốt nhất của Java EE hiện nay.
Nó được sử dụng phổ biến nhất trong các Framework của Java, với cộng đồng sử dụng đông đảo, tài liệu trainning và support rất nhiều.
Tại Việt Nam, Spring là Framework Java được ưa thích sử dụng và rất phổ biến.

Biểu đồ độ phổ biến của các Framework trong Java.

2. THÀNH PHẦN CỦA SPRING FRAMEWORK


2.1. Core Container.

Core package là phần cơ bản nhất của framework, cung cấp những đặc tính IoC (Inversion of Control: Khung chứa đảo ngược khống chế) và Dependency Injection.

Khái niệm cơ bản là BeanFactory - cài đặt factory pattern cho phép bạn móc nối sự phụ thuộc giữa các đối tượng trong file cấu hình.

2.2. Spring Context/Application Context.

Phía trên của Core package là Context package - cung cấp cách để truy cập đối tượng.

Context package kết thừa các đặc tính từ bean package và thêm vào chức năng đa ngôn ngữ (I18N), truyền sự kiện, resource-loading,...

2.3. Spring AOP (Aspect Oriented Programming).

Spring AOP module tích hợp chức năng lập trình hướng khía cạnh vào Spring framework thông qua cấu Hình của nó. Spring AOP module cung cấp các dịch vụ quản lý giao dịch cho các đối tượng trong bất kỳ ứng dụng nào sử dụng Spring. Với Spring AOP chúng ta có thể tích hợp declarative transaction management vào trong ứng dụng mà không cần dựa vào EJB component.

Spring AOP module cũng đưa lập trình metadata vào trong Spring. Sử dụng cái này chúng ta có thể thêm annotation (chú thích) vào source code để hướng dẫn Spring và làm thế nào để liên hệ với aspect (Khía cạnh khác).

2.4. Spring DAO.

DAO package cung cấp cho tầng JDBC, bỏ bớt những coding dài dòng của JDBC và chuyển đổi mã lỗi được xác định bởi database vendor. JDBC package cung cấp cách lập trình tốt như declarative transaction management.

Tầng JDBC và DAO đưa ra một cây phân cấp exception để quản lý kết nối đến database, điều khiển exception và thông báo lỗi được ném bởi vendor của database. Tầng exception đơn giản điều khiển lỗi và giảm khối lượng code mà chúng ta cần viết như mở và đóng kết nối. Module này cũng cung cấp các dịch vụ quản lý giao dịch cho các đối tượng trong ứng dụng Spring.

2.5. Spring ORM.

ORM package cung cấp tầng tích hợp với object-
relational mapping API bao gồm: JDO, Hibernate, iBatis.

Sử dụng ORM package bạn có thể sử dụng tất cả các object-relational mapping đó kết hợp với tất cả các đặc tính của Spring như declarative transaction management.

2.6. Spring Web module.

Spring Web package cung cấp đặc tính của web như: chức năng file-upload, khởi tạo IoC container sử dụng trình lắng nghe serlvet và web-oriented application context.

Nằm trên application context module, cung cấp context cho các ứng dụng web. Spring cũng hỗ trợ tích hợp với Struts, JSF và Webwork. Web module cũng làm giảm bớt các công việc điều khiển nhiều request và gắn các tham số của request vào các đối tượng domain.

2.7. Spring MVC Framework.

Spring Framework là một ứng dụng mã nguồn mở phổ biến cho Java EE phát triển dễ dàng hơn. Nó bao gồm một container, một framework cho các thành phần quản lý, và một bộ các snap-in dịch vụ cho các giao diện người dùng web, giao dịch,.... Một phần của

Spring Framework là Spring Web MVC, một mô hình MVC mở rộng để tạo các ứng dụng web.

MVC Framework thì cài đặt đầy đủ đặc tính của MVC pattern để xây dựng các ứng dụng Web. MVC framework thì cấu hình thông qua giao diện và chứa được một số kỹ thuật view bao gồm: JSP, Velocity, Tiles và generation of PDF và Excel file. Spring MVC framework cung cấp sự phân biệt rõ ràng giữa domain model và web form.

3. LÝ DO SỬ DỤNG
  • Tất cả các framework đã được tích hợp rất tốt vào Spring.
  • Hoạt động rất tốt khi áp dụng theo kiến trúc MVC.
  • Sử dụng cơ chế plug-in.
  • Kết hợp rất tốt với các O/R (object-relational) Mapping frameworks như là Hibernate.
  • Dễ Testing ứng dụng.
  • Ít phức tạp hơn so với các framework khác.
  • Cộng đồng người sử dụng rất nhiều, nhiều sách mới được xuất bản.
4. SƠ ĐỒ LUỒNG ĐI CỦA CHƯƠNG TRÌNH

Sơ đồ request - reponse:





DispatcherServlet của Spring MVC sẽ đọc file xml cấu hình theo nguyên tắc mà SpringMVC đề ra:




  • {servlet-name} ==> /WEB-INF/{servlet-name}-servlet.xml

Trong trường hợp bạn không muốn sử dụng nguyên tắc đó bạn có thể cấu hình DispatcherServlet của SpringMVC theo cách sau (Trong file web.xml):

1
2
3
4
5
6
7
8
9
10
<servlet>
  <servlet-name>my-dispatcher-name</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
  <init-param>
      <!-- override default name {servlet-name}-servlet.xml -->
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/springmvc-myconfig.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
Luồng đi chính của ứng dụng MVC:

5. DOWNLOAD DEMO

Link tải demo và tài liệu tham khảo:

https://drive.google.com/drive/u/0/folders/0B8PjuGQA6-MdbnFaTGNDdnZON2s

Công nghệ sử dụng trong ví dụ demo:

  • Spring MVC 4
  • Maven project
  • Database Postgres SQL 9.2

6. TÀI LIỆU THAM KHẢO

Bài viết có tham khảo tài liệu và sử dụng hình ảnh của các trang dưới dây:

Bài mới

Bài đăng nổi bật