Asp.net Mvc İle Günlük Doviz Kurlarını Quartz ile belirli aralıklarla çekme

Coşkun Kurtuldu
4 min readJul 9, 2018

--

Merhabalar,

Zaman zaman projelerimizde kullandığımız teknolojileri ve öğrendiklerimizi sizlere de elimizden geldiğince aktarmaya çalışıyoruz. Bu yazımda sizlere bir örnek proje ile birlikte doviz.com adresinde yayımlanan anlık doviz kurlarını belirlediğimiz zaman aralığında Uluslararası ISO 4217 para birimi kodlarıyla birlikte veritabanımıza kaydedilmesini anlatarak yine github üzerinde projenin açık kaynak kod örneğini paylaşacağım.

Bu örnek projede Nuget Package içerisinde bulunan Quartz ve Asp.net Entity Framework kütüphanelerini kullanacağım. Veritabanını oluşturururken codefirst yaklaşımını kullanacağım. Ayrıca uluslararası para birimi kodlarının sıralı listesine buradan ulaşabilirsiniz.

Projede kullanmış olduğum quartz kütüphanesinden kısaca bahsetmek istiyorum.

Quartz.Net Kütüphanesi Nedir? Nasıl kullanılır?

Projelerimizde ihtiyaçlarımız doğrultusunda zamana bağlı olarak çalıştırılmasını istediğimiz yapılara ihtiyaç duyuyor olabiliriz. Örnek olarak her sabah saat 07:00'de müşterilerimize mail atan bir göreve ihtiyaç duyabiliriz. Aslında bir çok kişi bu tarz işlemleri yapmak için bir console uygulaması geliştirir ve windows server’da task schedular’a bu uygulamayı ne zaman çalıştıracağını söyler ve iş biter. Ancak gerek sunucuya erişimin kısıtlı olduğu durumlarda, gerekse ikinci bir uygulama geliştirmenin yol açtığı efor düşündüğünde quartz.net daha avantajlı gibi görünüyor.

Windows servis yazmaktan ve server’a erişim sorunlarından bizleri tamamen kurtararak, açık kaynak ve kullanımı oldukça basit olan bu kütüphane sayesinde günün belirli saatinde, her saat-dakika başında veya haftanın belirli gününde bir görev çalıştırılmasını sağlayabiliriz. Quartz kütüphanesini projemize dahil edebilmemiz için “Package Manager Console” penceresine “Install-Package Quartz” komutunu yazıp, entera basabiliriz. Eğer komut çalışmıyorsa şu adrese göz atınız. Buradaki adresten Quartz kütüphanesi ile ilgili çeşitli özelliklere erişim sağlayabilirsiniz.

Gelelim Projemize. Projenin kurgusu şu şekilde olacak:

Projemizde iki katman bulunmaktadır.

  1. Katman web sayfasının olduğu ve günlük kurların listelendiği ve gelecekte başka işleri(Çapraz kur sorgulama, kur istatistikleri vb.) yapmak üzere hazırlamış olduğumuz katman.
  2. Katman ise entities yani veritabanı işlemlerinin, modellerinin oluşturulduğu katman.
Entities ve Web katmanının bulunduğu yapı

Entities katmanı içerisinde “Manage Nuget Manager” içerisinden projeye EntityFramework 6.2.0 sürümünü indiriyorum. Bu sürümü indirdikten sonra Currency, ExchangeRateData, ExchangeRateHistory adında 3 adet model oluşturuyorum. Bu modeller sırasıyla şu işleri yapacaklar.

  1. Currency: 67 ülkenin para birimini Configuration sınıfı içerisinde ilk olarak seedleyerek otomatik olarak ülkelerin ve ülke kodlarının projeme dahil olmasını sağladım. Buradaki amacım tamamen seed metodonun kullanımını daha önce kullanmayan arkadaşlara aktarmaktı.
  2. ExchangeRateData: Belirlediğimiz zaman aralığında https://www.doviz.com/api/v1/currencies/all/latest adresine giderek güncel olan kurları bu tablomuza yazıyoruz ve daha önceden tablomuzda var olan kayıtları siliyoruz. Burada istediğiniz bir başka veri kaynağını da kullanabilirsiniz.
  3. ExchangeRateHistory: Bu tabloda ise daha önceden var ExchangeRateData tablosuna kaydedilen kayıtların bir kopyasını da bu tabloya ekliyoruz. Daha sonrasında kendimize başka veriler elde edebiliriz :-)
Veritabanı tablolarını temsil eden entity sınıfları

Tabloları ve CurrencyContext.cs dosyasını oluşturup, tablolar arasındaki ilişkileri kurduktan sonra sırasıyla, “enable migration”, “add-migration” ve “update database” komutlarını çalıştırıyorum. Fakat siz projeyi github üzerinden clone edeceğiniz için sadece “update-database” komutunu çalıştırmanız yeterli olacaktır.

Burada kesinlikle dikkat edilmesi gereken kısım web projesi içerisinde bulunan web.config dosyasında bulunan connectionstring Data Source bağlantı cümlesinin kendi Sql bağlantı adresi olarak değiştirilmesi gerekmektedir.

enable migration, add-migration ve update-database komutları

Daha öncesinde Currency sınıfını seed metodunun kullanımını göstermek amacıyla kullandığımdan bahsetmiştim. Seed metodu kısaca veritabanına sabit değerler atamak ve update-database sorgusu çalıştırıldığında tanımlanan kayıtların veritabanı tablolarına otomatik olarak aktarılmasını sağlamaktadır.

Seed metodunun kullanıldığı sayfa

Web projesi içerisinde öncelikli olarak “Manage Nuget Manager” içerisinden projeye EntityFramework 6.2.0 ve Quartz.Net 2.6.0 sürümlerini indiriyorum. Daha sonrasında Global.asax içerisinde Döviz kurlarının belirli bir aralıkta tabloya kayıt edilmesi için Quartz ayarlarımızı yapıyorum. Döviz kurlarının hangi aralıklarda indirileceği bilgisini ise web.config içerisinde bulunan “currencyUpdateMinute” ile alıyorum. Belirlenen dakika geldiği anda ise ProjectFunctions.UpdateExchangeRate(); fonksiyonunu çağırarak veritabanında var olan kayıtları silme ve yeniden kaydetme işlemlerini gerçekleştiriyorum.

Global.asax ayarları

Veritabanına kayıtların aktarıldığı ProjectFunctions.UpdateExchangeRate fonksiyonu içerisinde ise aşağıdaki işlemleri yapıyorum.

Veritabanına kayıtların atıldığı kısım

Burada sırasıyla şu işlemler yapılıyor:

  1. https://www.doviz.com/api/v1/currencies/all/latest adresindeki tüm json tipindeki dataları “currencyJsonSerializeList” string değerine string tipinde alıyorum.
  2. Json tipinde olan datayı deserialize ediyorum.
  3. Daha önce ExchangeRateData tablosunda var olan kayıtları siliyorum.
  4. ExchangeRateData tablosuna yeni kayıtları kaydediyorum.
  5. ExchangeRateHistory tablosuna yeni gelen kayıtları ekliyorum.

Tüm bu işlemleri tamamladıktan sonra ise Anasayfada jquery datatables kütüphanesini kullanarak eklemiş olduğum dataları ekranda gösteriyorum. Datatables kütüphanesi ile ilgili detaylara buradan ulaşabilirsiniz.

Güncel döviz kurlarının ekranda gösterilen hali

İlgili projenin kaynak kodlarına buradan ulaşabilirsiniz.

Faydalı olması dileğiyle..

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Responses (1)

Write a response