-
DB 인터페이스 분리개발/java 2024. 10. 28. 17:41
RDB , SNOWFLAKE , Athena 등 DB를 다양하게 사용하는 경우가 있을 수가 있다.
예를 들어 큰 DB를 읽어 오는데 부담 될때 특정 조건에 따라 RDB -> SnowFlake나 S3로 적재된 Athena를 콜 하는 방식말이다
이 경우 Mybatis를 사용하는 개발자들은 각각의 DB 정보를 이용해 Config를 등록하며 이를 mybatis sqlSessionFactory에 연결한 후 이를 특정 어노테이션을 붙이면 해당 method를 mapper.xml에 있는 method를 연결하도록 구현을 할 것 이다
예를 들어 @Athena , @Snow 라는 애노테이션을 인터페이스에 연결만 한다면 Mybatis로 연동하는 방식이다
예를 들면
@Configuration @RequiredArgsConstructor @MapperScan(basePackages = "사용할 packages 경로" , annotationClass ="Temp.class" ,sqlSessionFactoryRef ="참조할 sql SessionFactory bean" ) public class DBConfig{ @Bean(name={"property"}) @ConfigurationProperties(prefix="spring.datasource.info") public PoolProperties getPoolProperties(){return new PoolProperties();} @Bean(name={"dataSource"}) public HikariDataSource getDataSource(@Qualifier("property") PoolProperties property){ HikariConfig hikariConfig = new HikariConfig(); hikariConfig.setDriverClassName(property.getDriverClassName()); hikariConfig.setJdbcUrl(property.getUrl()); hikariConfig.setUserName(userName); hikariConfig.setPassword(password); return new HikariDataSource(hikariConfig); } @Bean(name="sqlSessionFactory") public SqlSessionFactory DBSqlSessionFactory(@Qualifier("dataSource") HikariDataSource getDataSource){ SqlSessionFactory sqlSessionFactory = new SqlSessionFactory(); sqlSessionFactory.setDataSource(getDataSource); sqlSessionFactory.setConfigLocation("mybatis config 경로"); sqlSessionFactory.setMapperLocations("mybatis mapper 파일 경로"); return sqlSessionFactory; } }
이를 사용하는 곳에서는 mapper.xml 을 만들고 특정 method 내 sql을 작성하면 사용할 수 있다
@Temp public interface TempService{ void getOrderInfoList(OrderInfoRequestModel model); }
만약 동일 method를 이용해서 특정 조건에 따라 바꾸고 싶다면 상속 클래스를 두고 특정 조건에 따라 받아오는 서비스를 바꾸면 된다
if(RDB 조회하는 규칙){ OrderInfo orderInfoDao = applicationContext.getBean(RDBDao.class); }else{ OrderInfo orderInfoDao = applicationContext.getBean(TempDao.class); }
cf) applicationContext의 경우 @Autowired를 이용하여 주입받는다
'개발 > java' 카테고리의 다른 글
jpa 흉내내기 (2) 2024.10.23 enum 활용기 (2) 2024.09.11 CompletableFuture (6) 2024.09.05 java stream Util 만들기 (2) 2024.09.04 mybatis로 jpa 흉내내기 (3) 2024.09.03