Flyway – Databases Migration

Posted by:

Ngữ Cảnh:

Một ứng dụng, một database nhưng có nhiều schemas, mỗi 1 khách hàng là một schema, cấu trúc tables cho mỗi schema là giống nhau. Những tables trong schema public là dùng chung như là City , Country và cấu hình của ứng dụng, vì do dùng chung nên users chỉ được đọc, không có quyền ghi, tận dụng schema public có sẵn và phân quyền thôi. Nếu không thích tên public thì vẫn có tên tạo tên khác.

Khi cần thêm cột hay ...

Đọc tiếp
0

Lombok

Posted by:

Project mình đa phần là dùng Maven, Eclipse

<dependencies>
    ...
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.12</version>
        <scope>provided</scope>
    </dependency>
    ...
</dependencies>

Kiểm tra version mới nhất thì vào đây

Cài đặt lombok cho Eclipse

Để khi dùng thư viện ...

Đọc tiếp
0

Instagram đã sinh ra ID trong database của họ như thế nào

Posted by:

Đối với những hệ thống nhỏ chỉ cần 1 Database thì chắc chẳng mấy ai quan tâm đến việc tạo ra ID cho bản ghi. Vì dùng auto increment trong MySQL là có thể làm được rồi, chẳng cần phải làm gì thêm.

Thế nhưng với dữ liệu càng ngày càng to ra thì hệ thống chỉ có 1 database duy nhất có thể sẽ không thể đáp ứng được. Bởi vì traffic đang tập trung hết vào database đó.

Để giải ...

Đọc tiếp
0

Spring boot | application.properties vs application.yml

Posted by:

1/ .properties

Cấu trúc của properties là không cấp bặc và dùng `=`

Spring profiles: phải tách ra mổi profile là 1 file properties: local.properties, staging.properties, prod.properties

2/ .yml

Cấu trúc của yml thì có cấp bậc và dùng `:`

Spring profiles: cấu hình nhiều profiles trong 1 file yml

Khi dùng yml file thì chú ý, sẽ support @PropertySource để đọc file yml (Mình thì hem thích dùng chung 1 file sẽ ...

Đọc tiếp
0

Những nguyên tắc cơ bản nhất trong Java

Posted by:

1/ Khi constructor() có quá nhiều parameters thì nên dùng Builder. (vì quá đơn giản nên ko cần ví dụ link tham khảo)

2/ Nên dùng try-with-resources hơn là try-finally

[code lang=”java” highlight=”1,11″] Không nên:
static String firstLineOfFile(String path) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
br.close();
}
}

Nên:
static ...

Đọc tiếp
0

Some tips work with Java restful.

Posted by:

Nowadays most people are acquired with microservices restful. Now let’s take some time to explore what REST means and what a REST API is. REST stands for “REpresentational State Transfer”.

What are the basic features of a RESTful architecture:

  1. Stateless: Client data is not stored on the server between interactions and the session is stored client-side (typically in session storage).
  2. Client<->Server: There is a separation of concerns between the frontend (client) and the backend (server). They operate independently of each other and both are ...
Đọc tiếp
0

State Pattern

Posted by:

State: internal state object defines current behavior. The state changes, the behavior changes. Thay vì dùng if else bên ngoài, ta dùng state bên trong.

[code lang=”java”] public static void main(String[] args) {
Birth birth = new Birth();

}

public class Birth {

private State state; // interface

public Birth() {
state = new HappyState(this);
}

/**
* Makes time pass for the mammoth
*/
public void timePasses() {
if (state.getClass().equals(HappyState.class)) {
changeStateTo(new AngryState(this));
} else {
changeStateTo(new HappyState(this));
}
}

private void changeStateTo(State newState) {
this.state = ...

Đọc tiếp
0

Mediator Pattern

Posted by:

Mediator: đóng gói tất cả objects cần tương tác, các object không tương tác trực tiếp với nhau mà thông qua mediator object, dễ thay đổi, cách implement khá giống với Observer, thấy có thêm parameter và luôn có interface cho client.

[code lang=”java”] public class App {

public static void main(String[] args) {

// create party and members
Party party = new PartyImpl();
Hobbit hobbit = new Hobbit();
Wizard wizard = new Wizard();
Rogue rogue = new Rogue();
Hunter hunter = new Hunter();

// ...

Đọc tiếp
0
Page 1 of 5 12345