Spring Boot ile H2 In-Memory DB Kullanımı

Serkan KÜÇÜK
turkcell
Published in
3 min readDec 21, 2023

Java geliştiricileri için günümüzde en popüler Framework’lerden biri olan Spring Boot, hızlı ve etkili bir şekilde uygulama geliştirmeyi sağlar.

Biz de bu makalede, Spring Boot’un sunduğu avantajları kullanarak in-memory veritabanı H2 ile nasıl entegre edileceğini küçük bir rest api örneği ile inceleyeceğiz.

Kısaca H2 DB

In-memory veritabanı ihtiyacını karşılama için Java ile geliştirilmiş, açık kaynak kodlu, Sql tabanlı ilişkisel veritabanıdır. Küçük boyutu, yüksek performansı ve kolay entegrasyonu ile bilinir. In-memory veritabanları, özellikle eğitim, test ve case çalışmalarında kullanmak için idealdir.

1. Proje Oluşturma

Spring Boot projemizi oluşturmak için Spring Initializr kullanabiliriz. Maven ya da Gradle proje yönetim araçlarını seçerek (bu örnekte maeven) , proje bağımlılıklarına Spring Web ve H2 Database ekleyelim.

2. Veritabanı Yapılandırma

Projemizi oluşturduktan sonra application.properties dosyasında H2 veritabanını yapılandırmamız gerekmektedir.

spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.path=/h2-console

DB yapılandırırken eğer uygulama yeniden başlatıldığında verilerin kaybolmasını istemiyorsak;

spring.datasource.url=jdbc:h2:file:D:/h2/test

url kısmına bu şekilde istediğimiz bir dosya yolunu verebiliriz.

3. Entity Sınıflarını Oluşturma

Veritabanında tablolara karşılık gelen entity sınıflarını oluşturalım. Örneğin, bir User entity sınıfı:

@Entity
@Data
@Table(name = "Users")
public class User {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String surname;
private Integer age;
}

4. Controller, Service ve Repository Katmanları

Entity sınıflarını kullanarak iş mantığı operasyonlarını gerçekleştirecek servis, API’ları sağlayacak controller ve veritabanı işlemlerini sağlayacak repository sınıflarını oluşturalım.

@RequiredArgsConstructor
@RestController
@RequestMapping("/api/users")
public class UserController {

private final UserService userService;
private final ModelMapper modelMapper;

@GetMapping("/id/{id}")
ResponseEntity<UserDto> getUser(@PathVariable Long id) {
User user = userService.getUserById(id);
return ResponseEntity.ok(modelMapper.map(user, UserDto.class));
}
}

public interface UserService {

User getUserById(Long id);
}

@RequiredArgsConstructor
@Service
public class UserServiceImpl implements UserService {

private final UserRepository userRepository;

@Override
public User getUserById(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new NotFoundException(id, User.class.getSimpleName()));
}
}
public interface UserRepository extends JpaRepository<User,Long> {

}

Uygulamayı Çalıştırma

Uygulamamızı çalıştırıp http://localhost:8080/h2-console url adresinden db console’a erişebiliriz.

application.properties dosyasında yazdığımız jdbc url bilgisi ile buradan db ekranına giriş yapıyoruz. Karşımıza aşağıdaki gibi db bilgileri ve console ekranı çıkıyor

Console üzerinden DB sorgularımız ile istediğimiz işlemleri yapabiliriz. Api sonuçlarını da bu şekilde görebiliriz.

Url: http://localhost:8080/api/users/id/1

{"name":"Adem","surname":"Demir","age":25}

Sonuç

Spring Boot ve H2 kullanarak in-memory veritabanı entegrasyonu, hızlı prototip oluşturmak, testler yazmak ve küçük çaplı uygulamalar geliştirmek için güçlü bir çözümdür. Bu makalede bahsedilen adımları takip ederek, bu teknolojileri etkili bir şekilde kullanabilirsiniz.

Bu sadece temel bir örnektir ve projenizin gereksinimlerine göre yapılandırma değişiklikleri yapabilirsiniz.

İçerik umarım faydalı olmuştur. Hoşça kalın.

--

--