Spring Boot - Veritabanı Yönetimi

Spring Boot, Veritabanı için bir Veri Kaynağı oluşturmak için çok iyi bir destek sağlar. Spring Boot'ta bir DataSource oluşturmak için fazladan kod yazmamıza gerek yok. Sadece bağımlılıkları eklemek ve yapılandırma detaylarını yapmak bir DataSource oluşturmak ve Veritabanını bağlamak için yeterlidir.

Bu bölümde, veritabanına bağlanmak için Spring Boot JDBC sürücü bağlantısını kullanacağız.

Öncelikle, derleme yapılandırma dosyamıza Spring Boot Starter JDBC bağımlılığını eklememiz gerekir.

Maven kullanıcıları pom.xml dosyasına aşağıdaki bağımlılıkları ekleyebilir.

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

Gradle kullanıcıları, build.gradle dosyasına aşağıdaki bağımlılıkları ekleyebilir.

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

H2 veritabanına bağlanın

H2 veritabanına bağlanmak için, H2 veritabanı bağımlılığını derleme yapılandırma dosyamıza eklememiz gerekir.

Maven kullanıcıları için, aşağıdaki bağımlılığı pom.xml dosyanıza ekleyin.

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

Gradle kullanıcıları için, build.gradle dosyanıza aşağıdaki bağımlılığı ekleyin.

compile('com.h2database:h2')

H2 veritabanına bağlanmak için classpath src / main / resources dizini altında schema.sql dosyasını ve data.sql dosyasını oluşturmamız gerekiyor.

Schema.sql dosyası aşağıda verilmiştir.

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

Data.sql dosyası aşağıda verilmiştir.

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

MySQL'e bağlanın

MySQL veritabanına bağlanmak için MySQL bağımlılığını derleme yapılandırma dosyamıza eklememiz gerekir.

Maven kullanıcıları için, pom.xml dosyanıza aşağıdaki bağımlılığı ekleyin.

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

Gradle kullanıcıları için, build.gradle dosyanıza aşağıdaki bağımlılığı ekleyin.

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

Şimdi, gösterildiği gibi MySQL'de veritabanı ve tablolar oluşturun -

Özellikler dosyası kullanıcıları için, application.properties dosyasına aşağıdaki özellikleri ekleyin.

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

YAML kullanıcıları için, application.yml dosyasına aşağıdaki özellikleri ekleyin.

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

Redis'i bağlayın

Redis, bellek içi veri yapısını depolamak için kullanılan açık kaynaklı bir veritabanıdır. Redis veritabanını Spring Boot uygulamasına bağlamak için, yapı yapılandırma dosyamıza Redis bağımlılığını eklememiz gerekir.

Maven kullanıcıları pom.xml dosyanıza aşağıdaki bağımlılığı eklemelidir.

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

Gradle kullanıcıları, build.gradle dosyanıza aşağıdaki bağımlılığı eklemelidir.

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

Redis bağlantısı için RedisTemplate kullanmamız gerekiyor. RedisTemplate için JedisConnectionFactory ayrıntılarını sağlamamız gerekir.

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

Şimdi RedisTemplate sınıfını otomatik olarak bağlayın ve Redis veritabanından verilere erişin.

@Autowired

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

JDBCTemplate

Spring Boot uygulamasında JdbcTemplate kullanarak İlişkisel Veritabanına erişmek için, derleme yapılandırma dosyamıza Spring Boot Starter JDBC bağımlılığını eklememiz gerekir.

Ardından, JdbcTemplate sınıfını @Autowired ettiyseniz, Spring Boot Veritabanına otomatik olarak bağlanır ve JdbcTemplate nesnesi için Veri Kaynağını ayarlar.

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

@Repository notu sınıf dosyasına eklenmelidir. @Repository ek açıklaması, Spring Boot uygulamanız için veritabanı deposu oluşturmak için kullanılır.

@Repository
public class ProductServiceDAO {
}

Çoklu Veri Kaynağı

Tek bir Spring Boot uygulamasında 'n' sayıda Veri Kaynağını tutabiliriz. Burada verilen örnek, Spring Boot uygulamasında 1'den fazla veri kaynağının nasıl oluşturulacağını gösterir. Şimdi, uygulama özellikleri dosyasına iki veri kaynağı yapılandırma ayrıntısını ekleyin.

Özellikler dosyası kullanıcıları için, aşağıdaki özellikleri application.properties dosyanıza ekleyin.

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

Yaml kullanıcıları application.yml dosyanıza aşağıdaki özellikleri eklemelidir.

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

Şimdi, birden çok veri kaynağı için DataSource ve JdbcTemplate oluşturmak için bir Configuration sınıfı oluşturun.

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

Ardından, @Qualifier açıklamasını kullanarak JDBCTemplate nesnesini otomatik olarak bağlayın.

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

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