post-image

Spring Boot – Database Handling

Spring Boot Starters & Common Configurations

Spring Boot hỗ trợ rất tốt để tạo DataSource cho Database. Chúng ta không cần viết thêm bất kỳ dòng code nào để tạo DataSource trong Spring Boot. Chỉ cần thêm các dependencies và thực hiện cấu hình chi tiết để tạo DataSource và kết nối với Database.

Trong bài hôm nay, chúng ta sẽ sử dụng Spring Boot JDBC để kết nối cơ sở dữ liệu.

Đầu tiên, chúng ta cần thêm phần dependency Spring Boot Starter JDBC vào file cấu hình configuration của dự án của chúng ta.

Người sử dụng Maven có thể thêm các phần dependencies sau vào file pom.xml.

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
Code language: HTML, XML (xml)

Người sử dụng Gradle có thể thêm các phần dependencies sau vào file build.gradle.

compile('org.springframework.boot:spring-boot-starter-jdbc')
Code language: JavaScript (javascript)

Connect to H2 database

Để kết nối H2 database, chúng ta cần thêm phần dependencies H2 database vào file configuration của chúng ta.

Người sử dụng Maven có thể thêm các phần dependencies sau vào tệp pom.xml.

<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency>
Code language: HTML, XML (xml)

Người sử dụng Gradle có thể thêm các phần dependencies sau vào file build.gradle.

compile('com.h2database:h2')
Code language: JavaScript (javascript)

Chúng ta cần tạo file schema.sql và file data.sql trong thư mục classpath src/main/resources để kết nối H2 database.

File schema.sql được cung cấp bên dưới.

CREATE TABLE PRODUCT (ID INT PRIMARY KEY, PRODUCT_NAME VARCHAR(25));

File data.sql được cung cấp bên dưới.

INSERT INTO PRODUCT (ID,PRODUCT_NAME) VALUES (1,'Honey'); INSERT INTO PRODUCT (ID,PRODUCT_NAME) VALUES (2,'Almond');
Code language: JavaScript (javascript)

Connect MySQL

Để kết nối với MySQL, chúng ta cần thêm dependency của MySQL vào file configuration của chúng ta.

Người sử dụng Maven có thể thêm các phần dependencies sau vào tệp pom.xml.

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
Code language: HTML, XML (xml)

Người sử dụng Gradle có thể thêm các phần dependencies sau vào file build.gradle.

compile('mysql:mysql-connector-java')
Code language: JavaScript (javascript)

Bây giờ, tạo cơ sở dữ liệu và bảng trong MySQL:

Database and Tables in MySQL

Đối với người dùng file properties, hãy thêm các properties sau vào file application.properties.

spring.datasource.driverClassName = com.mysql.jdbc.Driver spring.datasource.url = jdbc:mysql://localhost:3306/PRODUCTSERVICE?autoreconnect=true spring.datasource.username = root spring.datasource.password = root spring.datasource.testOnBorrow = true spring.datasource.testWhileIdle = true spring.datasource.timeBetweenEvictionRunsMillis = 60000 spring.datasource.minEvictableIdleTimeMillis = 30000 spring.datasource.validationQuery = SELECT 1 spring.datasource.max-active = 15 spring.datasource.max-idle = 10 spring.datasource.max-wait = 8000
Code language: JavaScript (javascript)

Đối với người dùng YAML, hãy thêm các properties sau vào tệp application.yml.

<pre class="wp-block-syntaxhighlighter-code">spring: datasource: driverClassName: com.mysql.jdbc.Driver url: "jdbc:mysql://localhost:3306/PRODUCTSERVICE?autoreconnect=true" username: "root" password: "root" testOnBorrow: true testWhileIdle: true timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 30000 validationQuery: SELECT 1 max-active: 15 max-idle: 10 max-wait: 8000</pre>
Code language: JavaScript (javascript)

Connect Redis

Redis là gì? – Redis (REmote DIctionary Server) là một mã nguồn mở được dùng để lưu trữ dữ liệu có cấu trúc, có thể sử dụng như một database, bộ nhớ cache hay một message broker.

Để kết nối cơ sở dữ liệu Redis trong Spring Boot, chúng ta cần thêm dependency Redis vào file configuration của mình.

Người sử dụng Maven có thể thêm các phần dependencies sau vào tệp pom.xml.

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency>
Code language: HTML, XML (xml)

Người sử dụng Gradle có thể thêm các phần dependencies sau vào file build.gradle.

compile('org.springframework.boot:spring-boot-starter-data-redis')
Code language: JavaScript (javascript)

Đối với kết nối Redis, chúng ta cần sử dụng RedisTemplate. Đối với RedisTemplate chúng ta cần cung cấp thông tin chi tiết về JedisConnectionFactory.

@Bean JedisConnectionFactory jedisConnectionFactory() { JedisConnectionFactory jedisConFactory = new JedisConnectionFactory(); jedisConFactory.setHostName("localhost"); jedisConFactory.setPort(6000); jedisConFactory.setUsePool(true); return jedisConFactory; } @Bean public RedisTemplate<String, Object> redisTemplate() { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(jedisConnectionFactory()); template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(new StringRedisSerializer()); template.setValueSerializer(new StringRedisSerializer()); return template; }
Code language: JavaScript (javascript)

Bây giờ thêm @Autowired vào class RedisTemplate và truy cập data từ Redis database.

@Autowired RedisTemplate<String, Object> redis; Map<Object,Object> datalist = redis.opsForHash().entries(“Redis_code_index_key”);
Code language: JavaScript (javascript)

JDBCTemplate

Để truy cập Relational Database bằng cách sử dụng JdbcTemplate trong ứng dụng Spring Boot, chúng ta cần thêm các dependency Spring Boot Starter JDBC vào file cấu hình configuration.

Sau đó, nếu thêm @Autowired vào class JdbcTemplate, Spring Boot sẽ tự động kết nối tới Database và cài đặt DataSource cho object JdbcTemplate.

@Autowired JdbcTemplate jdbcTemplate; Collection<Map<String, Object>> rows = jdbc.queryForList("SELECT QUERY");
Code language: JavaScript (javascript)

Annotation @Repository phải được thêm vào class repository. Annotation @Repository được sử dụng để tạo kho cơ sở dữ liệu cho ứng dụng Spring Boot.

@Repository public class ProductServiceDAO { }
Code language: PHP (php)

Multiple DataSource

Chúng ta có thể giữ số ‘n’ DataSource trong 1 ứng dụng Spring Boot duy nhất. Ví dụ được đưa ra dưới đây cho thấy cách tạo nhiều hơn 1 DataSource trong ứng dụng Spring Boot. Bây giờ, hãy thêm 2 DataSource cấu hình chi tiết vào file properties của ứng dụng.

Đối với người sử dụng file properties, hãy thêm các properties sau vào file application.properties của bạn.

spring.dbProductService.driverClassName = com.mysql.jdbc.Driver spring.dbProductService.url = jdbc:mysql://localhost:3306/PRODUCTSERVICE?autoreconnect = true spring.dbProductService.username = root spring.dbProductService.password = root spring.dbProductService.testOnBorrow = true spring.dbProductService.testWhileIdle = true spring.dbProductService.timeBetweenEvictionRunsMillis = 60000 spring.dbProductService.minEvictableIdleTimeMillis = 30000 spring.dbProductService.validationQuery = SELECT 1 spring.dbProductService.max-active = 15 spring.dbProductService.max-idle = 10 spring.dbProductService.max-wait = 8000 spring.dbUserService.driverClassName = com.mysql.jdbc.Driver spring.dbUserService.url = jdbc:mysql://localhost:3306/USERSERVICE?autoreconnect = true spring.dbUserService.username = root spring.dbUserService.password = root spring.dbUserService.testOnBorrow = true spring.dbUserService.testWhileIdle = true spring.dbUserService.timeBetweenEvictionRunsMillis = 60000 spring.dbUserService.minEvictableIdleTimeMillis = 30000 spring.dbUserService.validationQuery = SELECT 1 spring.dbUserService.max-active = 15 spring.dbUserService.max-idle = 10 spring.dbUserService.max-wait = 8000
Code language: JavaScript (javascript)

Người sử dụng Yaml nên thêm các properties sau vào tệp application.yml của bạn.

spring: dbProductService: driverClassName: com.mysql.jdbc.Driver url: "jdbc:mysql://localhost:3306/PRODUCTSERVICE?autoreconnect=true" password: "root" username: "root" testOnBorrow: true testWhileIdle: true timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 30000 validationQuery: SELECT 1 max-active: 15 max-idle: 10 max-wait: 8000 dbUserService: driverClassName: com.mysql.jdbc.Driver url: "jdbc:mysql://localhost:3306/USERSERVICE?autoreconnect=true" password: "root" username: "root" testOnBorrow: true testWhileIdle: true timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 30000 validationQuery: SELECT 1 max-active: 15 max-idle: 10 max-wait: 8000
Code language: JavaScript (javascript)

Bây giờ, hãy tạo 1 class Configuration để tạo 1 DataSource và JdbcTemplate cho nhiều DataSource.

import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.jdbc.core.JdbcTemplate; @Configuration public class DatabaseConfig { @Bean(name = "dbProductService") @ConfigurationProperties(prefix = "spring.dbProductService") @Primary public DataSource createProductServiceDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "dbUserService") @ConfigurationProperties(prefix = "spring.dbUserService") public DataSource createUserServiceDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "jdbcProductService") @Autowired public JdbcTemplate createJdbcTemplate_ProductService(@Qualifier("dbProductService") DataSource productServiceDS) { return new JdbcTemplate(productServiceDS); } @Bean(name = "jdbcUserService") @Autowired public JdbcTemplate createJdbcTemplate_UserService(@Qualifier("dbUserService") DataSource userServiceDS) { return new JdbcTemplate(userServiceDS); } }
Code language: CSS (css)

Sau đó tự động inject đối tượng JDBCTemplate bằng cách sử dụng annotation @Qualifier.

@Qualifier("jdbcProductService") @Autowired JdbcTemplate jdbcTemplate; @Qualifier("jdbcUserService") @Autowired JdbcTemplate jdbcTemplate;
Code language: CSS (css)

Bài viết tham khảo từ nguồn:

https://www.tutorialspoint.com/spring_boot/spring_boot_database_handling.htm

Leave a Reply

Your email address will not be published. Required fields are marked *