20 Mayıs 2019 Pazartesi

SpringBoot spring.jpa Ayarları

Giriş
1. Yapılabilecek İşler
1.1 Database initialization
İki tane temel yöntem var. Aslında daha fazla yöntem var ancak ben diğerlerini sevmiyorum.
1. Initialize a database using JPA
2. Initialize a database using Spring JDBC

1.2 JPA
1.2.1 Metadata'dan Veri tabanı Oluşturma Script'i Yaratma
Önce şöyle yaparız. Böylece uygulama her başladığında schema yaratılır. Eğer bu alanı true yapmazsak mevcut dosyalar varsa, bu dosyalar baştan yaratılmazlar yani overwrite edilmezler. 
spring.jpa.generate-ddl=true
Sonra şöyle yaparız. Böylece veri tabanını boş olarak yaratmak için gerekli ddl komutları create.sql dosyasına yazılır
spring.jpa.properties.javax.persistence.schema-generation.create-source=metadata
spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create
spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=create.sql
1.2.2 Metadata'dan Veri tabanını Otomatik Oluşturma

2. Initialize a database using Spring JDBC
schema.sql, data.sql gibi özel dosyalar varsa bu dosyaları çalıştırır. SpringBoot Database Initialization Script Dosyaları yazısına taşıdım

2. Alanlar
Bazı alanlara bakalım
database Alanı
Bu satıra normalde gerek yok. Otomatik olarak veri tabanı tipi bulunur. Şöyle yaparız.
spring.jpa.database=MYSQL
database-platform Alanı
Açıklaması şöyle.
database-platform is actually unnecessary. Spring Data/Hibernate can autodetect the platform. However, without this property, if you run the app without having started your Postgres server, what you’ll get is a rather unhelpful error about not having added this config property instead of being told to start your server. This happens because Hibernate cannot autodetect the database platform, so complains about that before complaining about there not actually being a running server.
Şöyle yaparız.
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
open-in-view Alanı
Açıklaması şöyle.
Spring Boot by default enables the OpenEntityManagerInViewInterceptor which enables the open entitymanager in view pattern. This in turn leads you to a single EntityManager per request.
Açıklaması şöyle. Yani true ise @Transactional anotasyonuna bakmadan, EntityManager controller içinde de etkindir. Dolayısıyla OneToMany gibi lazy ilişkilerde, child tarafe view içinde de erişilebilir.
true : Maintains persistence context until the response or view is rendered to the client
false : After the Transaction, the persistence context is also closed
Örnek - true
Şöyle yaparız.
spring.jpa.open-in-view=true
Elimizde şöyle bir Controller kodu olsun
bulkUpsert(@RequestBody Orders orders){
  for(Order order:orders.getOrders()){
       saveOrUpdateOrder(order);
  }
}
Bu kod servis kodunu çağırsın
@Transactional
saveOrUpdateOrder(Order order){
   //do processing and call dao methods to save/update
}
Yeni transaction açılsın şeklinde düşünmemize rağmen aynı EntityManager kullanılmaya devam eder.

show-sql Alanı
SQL Loglama Ayaraları yazısına taşıdım

2. Hibernate
SpringBoot spring.jpa Hibernate Ayarları yazısına taşıdım.

Hiç yorum yok:

Yorum Gönder