개발자의 길

[java] spring Interceptor 에서 DB(mybatis) connection 연동 하기 본문

4. JAVA

[java] spring Interceptor 에서 DB(mybatis) connection 연동 하기

자르르 2019. 11. 15. 10:37


spring interceptor는 처음 프로젝트 실행할때,  인터셉터 부분은 @Controller나 @Service 어노테이션이 없어서,

메모리에 bean 생성을 안해놓아서, 일반적인 구조로는 db 연동이 되질 않는다.

 

db 연동 방법에는 세가지 방법이 있다.

spring을 어떤식으로 개발을 진행했는지에 따라서 선택적으로 하면 될 것 같다.

 

1. 첫번째 방법 

만약 SqlSessionTemplate를 이용했을 경우는

 

factory를 생성하고, sqlsession를 만드는 부분을 따로 만들어 준다

 

public SqlSessionFactory sqlSessionFactory() throws Exception {

//프로퍼티 값 읽어오기
 Properties properties = new Properties();
 ClassLoader loader = Thread.currentThread().getContextClassLoader();
 String proPath = loader.getResource("system.xml").getPath(); //db 정보가 들어있다.
 InputStream inputRead = new FileInputStream(proPath);
 properties.loadFromXML(inputRead);
 inputRead.close();

 BasicDataSource dataSource = new BasicDataSource();
 dataSource.setDriverClassName(properties.getProperty("jdbc.gaus.driverClassName"));
 dataSource.setUrl(properties.getProperty("jdbc.gaus.url"));
 dataSource.setUsername(properties.getProperty("jdbc.gaus.username"));
 dataSource.setPassword(properties.getProperty("jdbc.gaus.password"));
 
 PathMatchingResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();

 SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
 sqlSessionFactory.setDataSource(dataSource);
 sqlSessionFactory.setConfigLocation(resourceResolver.getResource("mybatis-config.xml"));
 sqlSessionFactory.setMapperLocations(resourceResolver.getResources("classpath:sqlmap/**/**/*.xml"));

 return sqlSessionFactory.getObject();
}

인터셉터 안에서는 (다른 어디서든)

TestController com = new TestController();
SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(com.sqlSessionFactory());
List<HashMap<String,Object>> menu_list= sqlSessionTemplate.selectList("Common.selectMenuList",user_no);

 

객체 생성해서 쓰면 된다.

내 실제 소스이다. 적당히 수정해서 쓰면 될 것 같다.

 

2. 두번째 방법

 

@Configuration 를 설정한 파일에서 해당 DB를 연동할 Service를 bean으로 등록하는 방법이 있다.

 

@Configuration
public class WebMvcConfigure implements WebMvcConfigurer {

   @Bean 
   public LoginService beanLoginService() {
     return new LoginService();
   }

   ....

   ....(이하 중략).

}

이후에 인터셉터에서(다른 어디서든)

@Autowired
private LoginService beanLoginService;

 

를 상단에 선언하고,

해당 service 기능(db 연동)을 사용하면 된다.

 

3. 세번째 방법

 

두번째 방법은, auto compile 할 시에 bean을 못 찾는다고 에러가 발생한다.(spring boot에서만 bean 순서에 따른 영향)

interceptor를 @Component 로 등록하지 말고, configure 파일에서 interceptor 자체를 bean 으로 등록 한다.

 

 

-----------------------------------------------------------------------------------------------------------

 

이렇게 db 연동 방법은 사용하는 부분이 한정되어있고, 몇개 없으면 3번째 방법을 추천하고,

 

여기저기 Service를 연동할 부분이 많으면 첫번째 방법이 편하다.



이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공유하기 링크
Comments