Chúng ta sẽ tìm hiểu những khái niệm cơ bản và cách setup một ứng dụng Helidon đơn giản

Giới thiệu

Như đã giới thiệu đến với các bạn về Helidon Framework ở bải viết trước, Helidon vừa có khả năng tạo ra các ứng dụng Kiến trúc Microservices một cách nhanh và đơn giản và vừa có khả năng hỗ trợ chuẩn Microprofile cho các lập trình viên vốn quen thuộc với các chuẩn của J2EE. Trong bài viết hôm nay chúng ta sẽ cùng đi khám phá phần đầu tiên trong kiến trúc của Helidon Framework - Helidon SE - tạo ra Kiến trúc Microservices một cách nhanh và đơn giản.

Chương trình Hello World

Tools cần chuẩn bị

  • Maven 3
  • JDK 8 trở lên
  • 1 IDE Java tuỳ chọn. Eclipse, Netbean, IntelliJ, ...

Đầu tiên chúng ta sẽ nhìn qua đoạn code sau để khởi tạo một chương trình Hello World đơn giản với Helidon SE:

package thecoderoot_helidon_helloworld;

import io.helidon.webserver.Routing;
import io.helidon.webserver.WebServer;
import java.util.concurrent.TimeUnit;

public class HelloWorld {
    public static void main(String[] args) throws Exception {
        WebServer webServer = WebServer
                .create(Routing.builder()
                        .any((req, res) -> res.send("Hello World!"))
                        .build())
                .start()
                .toCompletableFuture()
                .get(10, TimeUnit.SECONDS);

        System.out.println("Server started at: https://localhost:" + webServer.port());
    }
}

Trong đoạn code trên do chúng ta không chỉ định một port cụ thể nên Helidon sẽ tự đông tìm một port free và chạy ứng dụng trên port đó. Ví dụ sau ứng dụng đang chạy trên port 60416. Ứng dụng sẽ show ra dòng text "Hello World!" chúng ta khi truy cập bất kỳ đường dẫn nào từ https://localhost:60416.

Các thành phần chính của hàm Main

Để có thể tạo ra một ứng dụng Helidon, chúng ta cần các thành phần sau:

  • Routing: khai báo các config về Routing các request nhận từ người dùng và chuyển chúng đến nơi xử lý. Routing bắt buộc phải được khai báo trong mọi ứng dụng Helidon, trong trường hợp đơn giản nhất là trả về một response duy nhất cho mọi request các bạn có thể sử dụng đoạn code example ở trên.
  • Config (optional): Dùng để đọc và load các config cho Hệ Thống, được đọc từ file /resources/application.properties. Nếu chúng ta không khai báo các property config cụ thể thì mặc Helidon sẽ sử dụng các giá trị mặc định cho ứng dụng.
  • Sau khi khai báo và cấu hình cho Routing và Config, chúng ta sử dụng 1 trong 2 method sau để khởi chạy ứng dụng Helidon: WebServer.create(serverConfig, routing) hoặc WebServer.create(routing). 

Về cơ bản, chúng ta sẽ phải khai báo và cấu hình chi tiết cho Routing và Config, chúng ta sẽ lần lượt tìm hiểu chi tiết về chúng.

Routing

Routing routing = Routing.builder()
                         .get("/hello", (req, res) -> res.send("Hello World!")) 
                         .build();

WebServer webServer = WebServer.create(configuration, routing); 

HTTP Method:

Path Matcher:

Routing.builder()
       .post("/some/path", (req, res) -> { /* handler */ })

Configuration

Để có thể sử dụng được Config API để đọc các property configuration, chúng ta cần thêm Maven Dependency như sau:

<dependency>
    <groupId>io.helidon.config</groupId>
    <artifactId>helidon-config</artifactId>
    <version>0.10.4</version>
</dependency>

Và cú pháp để đọc property configuration từ file /resources/application.properties:

Config config = Config.builder().build();
int someValue = config.read("some.key").asInt();

Ví dụ: chúng ta khai báo một số property config như sau:

server.port=9080
web.debug=true
web.page-size=15
user.home=C:/Users/app

 Chúng ta sẽ lấy các giá trị trên trong Java code như sau:

int port = config.get("server.port").asInt();
int pageSize = config.get("web.page-size").asInt();
boolean debug = config.get("web.debug").asBoolean();
String userHome = config.get("user.home").asString();

Hoặc:

int pageSize = config
                .get("web")
                .get("page-size")
                .asInt();

Trong trường hợp các bạn cần giá trị mặc định nếu không tìm thấy giá trị trong file config:

int pageSize = config.get("web.page-size").asInt().orElse(50);
int pageSize = config
                .get("web")
                .get("page-size")
                .asInt()
                .orElse(50);

Chúc các bạn thành công.

AutoCode.VN

minhnhatict@gmail.com Helidon