일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 리눅스
- spring
- JPA
- docker
- swagger
- 헤더 설정
- dto valid
- 도커
- generate pojos
- SpringBoot
- jvm
- java8
- memcached
- docker 설치
- Java
- JavaScript
- Next.js 14
- header setting
- CentOS6
- 초기 세팅
- ollama langflow
- 초기 구축
- spring boot
- jpa entity자동
- MySQL
- custom valid
- NextJS
- generate entity
- java9
- React
- Today
- Total
개발자의 길
[java] spring Interceptor 에서 DB(mybatis) connection 연동 하기 본문
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 .... ....(이하 중략). } |
이후에 인터셉터에서(다른 어디서든)
@Autowired
private LoginService beanLoginService;
를 상단에 선언하고,
해당 service 기능(db 연동)을 사용하면 된다.
3. 세번째 방법
두번째 방법은, auto compile 할 시에 bean을 못 찾는다고 에러가 발생한다.(spring boot에서만 bean 순서에 따른 영향)
interceptor를 @Component 로 등록하지 말고, configure 파일에서 interceptor 자체를 bean 으로 등록 한다.
-----------------------------------------------------------------------------------------------------------
이렇게 db 연동 방법은 사용하는 부분이 한정되어있고, 몇개 없으면 3번째 방법을 추천하고,
여기저기 Service를 연동할 부분이 많으면 첫번째 방법이 편하다.
'4. JAVA' 카테고리의 다른 글
Spring Boot + Vue CLI 연동 환경 구축 (0) | 2020.04.10 |
---|---|
[java] Optional 사용법 및 제대로 쓰기 (0) | 2020.03.20 |
[java] java9(자바9) 새로운 기능 - 변화와 특징 요약 (1) | 2019.10.17 |
JVM의 default heap size 확인(리눅스, 윈도우) (1) | 2019.10.02 |
springboot - apache - tomcat 연동(springboot 내장톰캣) (0) | 2019.04.30 |
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.