spring framework ile java tabanlı datasource konfigurasyonu

Pazartesi, Nisan 18, 2016 kustemura 0 Yorum

Merhaba arkadaşlar ,
bu yazdıma Spring Framework DataSource konfigurasyonunu XML kullanmadan sadece Java tabanlı olarak oluşturacağız.(Bu örnekte MySQL kullanılacaktır.)

Öncelikle .properties dosyamızı oluşturuyoruz.


driverClassName = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/database-name
username = root
password = 


Ardından sınıfımızı oluşturuyoruz.


@Configuration
@PropertySource("classpath:/mysql.properties")
@ComponentScan(basePackages = "io.github.alicankustemur.blogproject")
public class BeanConfiguration
{

 @Autowired
 public Environment  environment;

 @Bean
 public SingleConnectionDataSource createDriverManagerDataSourceBean()
 {
  SingleConnectionDataSource driverManager = new SingleConnectionDataSource();
  driverManager.setDriverClassName(environment.getProperty("driverClassName"));
  driverManager.setUrl(environment.getProperty("url"));
  driverManager.setUsername(environment.getProperty("username"));
  driverManager.setPassword(environment.getProperty("password"));
  return driverManager;
 }

}
Bu sınıfın bir konfigurasyon işlemi yaptığını belirtmek için @Configuration anotasyonunu sınıfın başına ekliyoruz.

@PropertySource anotasyonu içerisinde ki "classpath:/mysql.properties" değeri mysql.properties dosyasını classpath içerisinde arayıp Environment'a enjekte etmektedir.
Daha sonra getProperty()  methodu ile birlikte properties dosyasında ki değişken değerlerine erişiyoruz.Bu değerleri de oluşturduğumuz SingleConnectionDataSource nesnesine set ediyoruz.

Burada SingleConnectionDataSource kullanmamın sebebi bu sınıf ile yapılan DataSource tanımlamaları sadece bir Connection nesnesinin kullanımına izin verir.Uygulama her zaman aynı Connection nesnesini kullanarak çalışmayı sürdürür.DriverManagerDataSource kullanılarak oluşturulan bir DataSource tanımlaması her veri tabanı bağlantı isteği için yeni bir Connection nesnesi oluşturacaktır.

@ComponentScan anotasyonu ile Spring'e gerekli sınıfları classpath içerisinde araması gerektiğini belirtiyoruz.

Burada createDriverManagerDataSourceBean() methodu üzerinde ki @Bean anotasyonu methodu bean haline getirip DAO işlemleri için Repository sınıfları içerisinde DataSource tanımlamalarına @Autowired anotasyonu ile otomatik olarak enjekte edeceğiz.
Aşağıda bununla ilgili kısa bir örnek verilmiştir.


@Component
public class JdbcRepositoryImpl implements Repository
{
 
 @Autowired
 private DataSource dataSource;
 
 @Override
 public void save(User user)
 {
  PreparedStatement preparedStatement = null;

  try
  {
   Connection connection = dataSource.getConnection();
   preparedStatement = connection
     .prepareStatement("INSERT INTO user (id,name) VALUES (?,?)");
   preparedStatement.setLong(1, user.getId());
   preparedStatement.setString(2, user.getName());
   preparedStatement.executeUpdate();
   preparedStatement.close();

  }
  catch (Exception e)
  {
  }

 }

 
}
Oluşturduğumuz konfigurasyon sınıfını ApplicationContext üzerinden çağırabilmek için AnnotationConfigApplicationContext nesnesi ile oluşturup constructor değerine ilgili konfigurasyon sınıfını belirtmek gerekmektedir.

Aşağıda bununla ilgili kısa bir örnek verilmiştir.


public class Main
{

 public static void main(String[] args) throws SQLException
 {

  ApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeanConfiguration.class);
  Repository repository = applicationContext.getBean(Repository.class);
  repository.save(1,"Ali Can Kuştemur");
 }

}

0 yorum :