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;