spring framework ile java tabanlı datasource konfigurasyonu
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.
@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 :