جاوا و تکنولوژی های آن

java programming language

در این وبلاگ به بررسی نکات موجود در جاوا و تکنولوژی های آن می پردازیم

طبقه بندی موضوعی


Spring Boot برای ساخت DataSource یک رویه اتوماتیک دارد که به ما کمک میکند سریعا به ابجکت DataSource دسترسی داشته باشیم علاوه بر آن Connection pool را هم بصورت پیش فرض ایجاد و تنظیماتش را ست میکند 

ولی گاهی اوقات برای موارد خاص نیاز داریم که خودمان این تنظیمات را ست کنیم و تحت کنترل ما DataSource ساخته شود که در این بخش به چگونگی ساخت DataSource سفارشی از طریق کدنویسی میپردازیم



کتابخانه های مورد نیاز را به پروژه اضافه میکنیم :


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>2.4.1</version> 
    <scope>runtime</scope> 
</dependency>




برای داشتن DataSource سفارشی با تنظیمات دلخواه راحتترین روش تعریف یک Bean@ در کلاس Configuration@ است 


@Configuration
public class DataSourceConfig {
     
    @Bean
    public DataSource getDataSource() {
        DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
        dataSourceBuilder.driverClassName("org.h2.Driver");
        dataSourceBuilder.url("jdbc:h2:mem:test");
        dataSourceBuilder.username("SA");
        dataSourceBuilder.password("");
        return dataSourceBuilder.build();
    }
}





میتوانیم برخی از گزینه های تنظیمات آنرا رد فایل application.properties هم ست کنیم 


spring.datasource.url=jdbc:h2:mem:test
spring.datasource.driver-class-name=org.h2.Driver
@Bean
public DataSource getDataSource() { 
    DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); 
    dataSourceBuilder.username("SA"); 
    dataSourceBuilder.password(""); 
    return dataSourceBuilder.build(); 
}



** تنظیماتی که در application.properties یا در کلاسی که با ConfigurationProperties@ مشخص شده است، تنظیمات پیش فرض موجود در Spring Boot را Override میکند و طبیعتا در مورد DataSource ما دیگر تنظیمات پیش فرضی که Spring Boot خود اعمال میکرد نادیده گرفته میشود و این امکان را به ما میدهد که تنظیمات Compile-Time و Run-Time از یکدیگر جدا باشند

همچنین میتوانیم DataSource های مختلفی برای کاربرد های مختلف ایجاد کنیم 




تست DataSource سفارشی :


ابتدا یک Entity@ میسازیم :

@Entity
@Table(name = "users")
public class User {
     
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    private String name;
    private String email;
 
    // standard constructors / setters / getters / toString
     
}




سپس لایه Repository را میسازیم که عملیات CRUD را با آن انجام دهیم :


@Repository
public interface UserRepository extends CrudRepository<User, Long> {}



تست کد :

@RunWith(SpringRunner.class)
@DataJpaTest
public class UserRepositoryIntegrationTest {
     
    @Autowired
    private UserRepository userRepository;
    
    @Test
    public void whenCalledSave_thenCorrectNumberOfUsers() {
        userRepository.save(new User("Bob", "bob@domain.com"));
        List<User> users = (List<User>) userRepository.findAll();
         
        assertThat(users.size()).isEqualTo(1);
    }    
}



اجرای یک نمونه از برنامه که با اجرا شدن آن باید لیست User ها را در خروجی کنسول ببینیم


@SpringBootApplication
public class Application {
 
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
 
    @Bean
    public CommandLineRunner run(UserRepository userRepository) throws Exception {
        return (String[] args) -> {
            User user1 = new User("John", "john@domain.com");
            User user2 = new User("Julie", "julie@domain.com");
            userRepository.save(user1);
            userRepository.save(user2);
            userRepository.findAll().forEach(user -> System.out.println(user);
        };
    }
}










نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی