STACKJAVA

Spring Core: Phần 7 – Spring PropertyPlaceholderConfigurer, lấy dữ liệu từ file properties

Spring Core: Phần 7 – Spring PropertyPlaceholderConfigurer, lấy dữ liệu từ file properties.

Ở ví dụ đầu tiên về Spring, mình có tạo 1 bean:

package stackjava.com.springioc.applicationcontext;

public class DataResource {
  private String driverClassName;
  private String url;
  private String username;
  private String password;

  public String getDriverClassName() {
    return driverClassName;
  }

  public void setDriverClassName(String driverClassName) {
    this.driverClassName = driverClassName;
  }

  public String getUrl() {
    return url;
  }

  public void setUrl(String url) {
    this.url = url;
  }

  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username;
  }

  public String getPassword() {
    return password;
  }

  public void setPassword(String password) {
    this.password = password;
  }

  public void printConnection() {
    System.out.println("url: " + this.url + "\n" + "username/password: " + this.username + "/" + this.password);
  }
}
<bean id="dataResource" class="stackjava.com.springioc.applicationcontext.DataResource">
  <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  <property name="url" value="jdbc:mysql://localhost/database_name" />
  <property name="username" value="root" />
  <property name="password" value="admin1234" />
</bean>

Các bạn để ý rằng các thông tin kết nối tới database thế này là các thông tin config chung cho database nên người ta sẽ để riêng nó ra thành 1 file properties để dễ quản lý và thay đổi.

Đồng thời trong môi trường doanh nghiệp, các file cấu hình bean không thể chỉnh sửa một cách trực tiếp nên chúng ta phải tách nó ra thành file riêng cho mỗi lần deploy.

Ví dụ bán sản phẩm cho mỗi công ty khác nhau thì có các thông tin database khác nhau

–> Sửa thông tin tương ứng trong file .properties cho công ty đó là được.

Ví dụ: mình sẽ gộp các thông tin kết nối database thành file jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/database_name
jdbc.username=root
jdbc.password=admin1234

Ví dụ với PropertyPlaceholderConfigurer

Khai báo một PropertyPlaceholderConfigurer trong file cấu hình bean và map nó với file .properties mà bạn tạo. Ở đây mình map với file jdbc.properties đã tạo.

<bean
  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location">
    <value>jdbc.properties</value>
  </property>
</bean>

Để lấy dữ liệu từ file .properties cho vào bean bạn dùng format:  ${variable} trong đó variable là key trong cặp key-values trong file properties.

<bean id="dataResource" class="stackjava.com.springioc.applicationcontext.DataResource">
  <property name="driverClassName" value="${jdbc.driverClassName}" />
  <property name="url" value="${jdbc.url}" />
  <property name="username" value="${jdbc.username}" />
  <property name="password" value="${jdbc.password}" />
</bean>

Demo:

package stackjava.com.springioc.applicationcontext;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
  public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    DataResource obj = (DataResource) context.getBean("dataResource");
    obj.printConnection();
  }
}

Kết quả:

url: jdbc:mysql://localhost/database_name
username/password: root/admin1234

Bây giờ mỗi lần deploy, thay đổi thông tin database thì bạn sẽ sửa ở file jdbc.properties.

 

Okay, Done!

Các bạn có thể download code ví dụ trên tại đây

Phần tiếp theo chúng ta sẽ tìm hiểu về các annotation trong Spring – một hướng tiếp cận mới thay vì phải sử dụng xml qua nhiều =))