Şuayb'in BloguŞuayb'in Blogu
Ana Sayfa
Kategoriler
Oyunlar
MediumHakkındaİletişim
Dil
Tema
    1. Blog
    2. Programlama
    3. Spring Boot JPA Auditing

Spring Boot JPA Auditing

İlk yayın10 Nisan 2025
Son güncelleme11 Nisan 2025
Okuma süresi3 dk okuma
JavaKotlinSpring BootSpring DataJPAAuditing
XLinkedInFacebook
Spring Boot JPA Auditing

Beğeni yükleniyor...

Spring Boot'ta JPA Auditing, bir varlığın kim tarafından ve ne zaman oluşturulduğunu veya değiştirildiğini otomatik olarak izlemenizi sağlar. Bu, denetim kayıtları, geçmiş izleme ve hata ayıklama için oldukça kullanışlıdır.


Son güncelleme11 Nisan 2025

Toplam görüntülenmeGörüntülenme yükleniyor...

Önceki makaleSpring Boot ile Test Odaklı GeliştirmeSonraki makaleSpring Boot AI Entegrasyonu
Şuayb Şimşek

Yazan

Şuayb Şimşek

Spring Boot, güvenlik, mikroservis ve cloud-native mimari konularında pratik teknik notlar paylaşan backend odaklı fullstack geliştirici.

Uzmanlık

  • Spring Boot
  • Go
  • Mikroservis
  • Next.js
  • Cloud Native

Bağlantılar

GitHubLinkedInMedium

Benzer yazılar

Spring Boot JPA ile JWE Kimlik Doğrulaması
Programlama

Spring Boot JPA ile JWE Kimlik Doğrulaması

Stateless şifreli JWT’ler (JWE) kullanarak Spring Boot API’lerinizi güvenli hale getirirken, kullanıcı kimliklerini ve rolleri JPA destekli bir veritabanında nasıl saklayacağınızı öğrenin.

11 Mayıs 20254 dk okuma
JavaKotlinSpring BootGüvenlikJWTJWEJPA
Spring Boot Configuration Properties
Programlama

Spring Boot Configuration Properties

@ConfigurationProperties ile tip-güvenli yapılandırma tanımlamayı, @Validated ile ayarları doğrulamayı ve profile-specific application-{profile}.yml dosyalarıyla ortama göre değer yönetimini öğrenin.

4 Şubat 20263 dk okuma
JavaKotlinSpring BootYapılandırma
Spring Boot GraphQL JWE Kimlik Doğrulama
Programlama

Spring Boot GraphQL JWE Kimlik Doğrulama

Stateless şifreli JWT’ler (JWE) ile Spring Boot GraphQL API’lerinizi güvenli hale getirmeyi; kullanıcı kimliği ve rolleri JPA ile bir veritabanında saklamayı öğrenin.

17 Mayıs 20256 dk okuma
JavaKotlinSpring BootGüvenlikJWTJWEGraphQL

Hakkımda

Spring Boot, mikroservis, güvenlik ve daha fazlası hakkında yazılar.

İletişimYeni başladıysan

Son yazılar

  • Captain Tsubasa 2: World Fighters
  • Captain Tsubasa: Rise of New Champions
  • Spring Boot Configuration Properties
  • Spring Boot GraphQL JWE Kimlik Doğrulama
  • Spring Boot JPA ile JWE Kimlik Doğrulaması

Popüler konular

JavaKotlinSpring BootGüvenlikJWEJWT

Abone ol

Yeni yazılar yayınlandığında pratik backend ve fullstack notlarını al.

Sosyal

© 2024-2026 Şuayb'in Blogu. Tüm hakları saklıdır.

🌟 Neden JPA Auditing Kullanmalıyım?

Bu bölümde Neden JPA Auditing Kullanmalıyım? konusunu netleştirip uygulamada kullanacağınız temel noktaları özetliyoruz.

  • 📅 createdDate, lastModifiedDate alanlarını otomatik takip edin
  • 👤 createdBy, modifiedBy bilgilerini kaydedin
  • 🧼 Alanları manuel ayarlamadan kaçınarak temiz kod yazın

📋 Gereksinimler

Başlamadan önce aşağıdakileri hazırlayın:

  • Java 17+
  • Spring Data JPA içeren Spring Boot 3.x projesi
  • Yapılandırılmış bir veritabanı bağlantısı (H2, PostgreSQL, MySQL vb.)
  • JPA entity ve repository akışı hakkında temel bilgi

🛠️ Adım 1: Bağımlılıkları Ekleyin

Projenize aşağıdaki bağımlılıkları ekleyin:

Maven:

XMLpom.xml
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

Gradle:

GROOVYbuild.gradle
dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}

🛠️ Adım 2: JPA Auditing Özelliğini Etkinleştirme

Ana sınıfınıza veya yapılandırma sınıfınıza @EnableJpaAuditing ekleyin.


🛠️ Adım 3: AuditorAware Bean'i Oluşturun

Bu bean, Spring'e geçerli kullanıcıyı bildirir. Statik bir kullanıcı örneği aşağıda:


🛠️ Adım 4: Entity Sınıfına Anotasyonları Ekle

Aşağıdaki gibi denetim anotasyonlarını kullanın: @CreatedDate, @LastModifiedDate, vb.


▶️ Uygulamayı Çalıştırma

Artık bir entityi JpaRepository ile kaydettiğinizde, denetim alanları otomatik olarak doldurulacaktır.


🧪 Test Etme

Bir entity kaydederek denetim alanlarının otomatik olarak doldurulup doldurulmadığını test edebilirsiniz.


🏁 Sonuç

Artık Spring Boot JPA Auditing için üretim odaklı bir Spring Boot temeliniz var. Sonraki adımda ayarları kendi domainine uyarlayıp test ve gözlemlenebilirlik katmanını ekleyerek gerçek trafik altında doğrulayın.

JAVADemoApplication.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@SpringBootApplication
@EnableJpaAuditing(auditorAwareRef = "auditorProvider")
public class DemoApplication {
  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
}
KOTLINDemoApplication.kt
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.data.jpa.repository.config.EnableJpaAuditing

@SpringBootApplication
@EnableJpaAuditing(auditorAwareRef = "auditorProvider")
class DemoApplication

fun main(args: Array<String>) {
    runApplication<DemoApplication>(*args)
}
JAVAAuditingConfig.java
@Configuration
public class AuditingConfig {

  @Bean
  public AuditorAware<String> auditorProvider() {
    return () -> Optional.of("Şuayb");
  }
}
KOTLINAuditingConfig.kt
@Configuration
class AuditingConfig {

  @Bean
  fun auditorProvider(): AuditorAware<String> = AuditorAware { Optional.of("Şuayb") }
}
JAVAArticle.java
@Entity
@EntityListeners(AuditingEntityListener.class)
public class Article {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private String title;

  @CreatedDate
  private LocalDateTime createdDate;

  @LastModifiedDate
  private LocalDateTime lastModifiedDate;

  @CreatedBy
  private String createdBy;

  @LastModifiedBy
  private String lastModifiedBy;

  // getter & setter
}
KOTLINArticle.kt
@Entity
@EntityListeners(AuditingEntityListener::class)
data class Article(
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  val id: Long? = null,

  var title: String? = null,

  @CreatedDate
  var createdDate: LocalDateTime? = null,

  @LastModifiedDate
  var lastModifiedDate: LocalDateTime? = null,

  @CreatedBy
  var createdBy: String? = null,

  @LastModifiedBy
  var lastModifiedBy: String? = null
)
JAVAArticleRepositoryTest.java
@SpringBootTest
@AutoConfigureTestDatabase
@Transactional
class ArticleRepositoryTest {

  @Autowired
  private ArticleRepository articleRepository;

  @Test
  void testAuditFieldsAreSet() {
    Article article = new Article();
    article.setTitle("Test Başlığı");

    Article saved = articleRepository.save(article);

    assertNotNull(saved.getCreatedDate());
    assertNotNull(saved.getLastModifiedDate());
    assertEquals("Şuayb", saved.getCreatedBy());
    assertEquals("Şuayb", saved.getLastModifiedBy());
  }
}
KOTLINArticleRepositoryTest.kt
@SpringBootTest
@AutoConfigureTestDatabase
@Transactional
class ArticleRepositoryTest {

  @Autowired
  lateinit var articleRepository: ArticleRepository

  @Test
  fun `denetim alanları ayarlanmalı`() {
    val article = Article().apply {
      title = "Test Başlığı"
    }

    val saved = articleRepository.save(article)

    assertNotNull(saved.createdDate)
    assertNotNull(saved.lastModifiedDate)
    assertEquals("Şuayb", saved.createdBy)
    assertEquals("Şuayb", saved.lastModifiedBy)
  }
}