Spring Boot - obsługa bazy danych

Spring Boot zapewnia bardzo dobrą obsługę tworzenia źródła danych dla bazy danych. Nie musimy pisać żadnego dodatkowego kodu, aby utworzyć źródło danych w Spring Boot. Wystarczy dodać zależności i wykonać szczegóły konfiguracji, aby utworzyć źródło danych i połączyć się z bazą danych.

W tym rozdziale wykorzystamy połączenie sterownika Spring Boot JDBC do połączenia z bazą danych.

Najpierw musimy dodać zależność Spring Boot Starter JDBC w naszym pliku konfiguracyjnym kompilacji.

Użytkownicy Mavena mogą dodać następujące zależności w pliku pom.xml.

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

Użytkownicy Gradle mogą dodawać następujące zależności w pliku build.gradle.

compile('org.springframework.boot:spring-boot-starter-jdbc')

Połącz się z bazą danych H2

Aby podłączyć bazę danych H2, musimy dodać zależność bazy danych H2 w naszym pliku konfiguracyjnym kompilacji.

W przypadku użytkowników Maven dodaj poniższą zależność w pliku pom.xml.

<dependency>
   <groupId>com.h2database</groupId>
   <artifactId>h2</artifactId>
</dependency>

W przypadku użytkowników Gradle dodaj poniższą zależność w pliku build.gradle.

compile('com.h2database:h2')

Musimy utworzyć plik schema.sql i plik data.sql w katalogu src / main / resources ścieżki klasy, aby połączyć bazę danych H2.

Plik schema.sql jest podany poniżej.

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

Plik data.sql znajduje się poniżej.

INSERT INTO PRODUCT (ID,PRODUCT_NAME) VALUES (1,'Honey');
INSERT INTO PRODUCT (ID,PRODUCT_NAME) VALUES (2,'Almond');

Połącz MySQL

Aby połączyć bazę danych MySQL, musimy dodać zależność MySQL do naszego pliku konfiguracji kompilacji.

W przypadku użytkowników Maven dodaj następującą zależność w pliku pom.xml.

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
</dependency>

W przypadku użytkowników Gradle dodaj następującą zależność w pliku build.gradle.

compile('mysql:mysql-connector-java')

Teraz utwórz bazę danych i tabele w MySQL, jak pokazano -

W przypadku użytkowników plików właściwości dodaj następujące właściwości w pliku 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

W przypadku użytkowników YAML dodaj następujące właściwości w pliku application.yml.

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

Połącz Redis

Redis to baza danych typu open source używana do przechowywania struktury danych w pamięci. Aby połączyć bazę danych Redis w aplikacji Spring Boot, musimy dodać zależność Redis w naszym pliku konfiguracyjnym kompilacji.

Użytkownicy Maven powinni dodać następującą zależność do pliku pom.xml.

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-redis</artifactId>
</dependency>

Użytkownicy Gradle powinni dodać następującą zależność w pliku build.gradle.

compile('org.springframework.boot:spring-boot-starter-data-redis')

W przypadku połączenia Redis musimy użyć RedisTemplate. W przypadku RedisTemplate musimy podać szczegóły 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;
}

Teraz automatycznie połącz klasę RedisTemplate i uzyskaj dostęp do danych z bazy danych Redis.

@Autowired

RedisTemplate<String, Object> redis;
Map<Object,Object> datalist = redis.opsForHash().entries(“Redis_code_index_key”);

JDBCTemplate

Aby uzyskać dostęp do relacyjnej bazy danych za pomocą JdbcTemplate w aplikacji Spring Boot, musimy dodać zależność Spring Boot Starter JDBC w naszym pliku konfiguracyjnym kompilacji.

Następnie, jeśli @Autowired klasę JdbcTemplate, Spring Boot automatycznie łączy bazę danych i ustawia źródło danych dla obiektu JdbcTemplate.

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

Adnotację @Repository należy dodać do pliku klasy. Adnotacja @Repository służy do tworzenia repozytorium bazy danych dla aplikacji Spring Boot.

@Repository
public class ProductServiceDAO {
}

Wiele źródeł danych

Możemy zachować liczbę źródeł danych w jednej aplikacji Spring Boot. Podany tutaj przykład pokazuje, jak utworzyć więcej niż jedno źródło danych w aplikacji Spring Boot. Teraz dodaj dwa szczegóły konfiguracji źródła danych w pliku właściwości aplikacji.

W przypadku użytkowników plików właściwości dodaj następujące właściwości do pliku application.properties.

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

Użytkownicy Yaml powinni dodać następujące właściwości w pliku application.yml.

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

Teraz utwórz klasę Configuration, aby utworzyć DataSource i JdbcTemplate dla wielu źródeł danych.

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);
   }
}

Następnie automatycznie połącz obiekt JDBCTemplate przy użyciu adnotacji @Qualifier.

@Qualifier("jdbcProductService")
@Autowired
JdbcTemplate jdbcTemplate;

@Qualifier("jdbcUserService")
@Autowired
JdbcTemplate jdbcTemplate;