개발
Spring Boot 프로젝트 설정 관련
DHBAEK
2023. 4. 21. 00:47
금일 샘플 소스 작성으로 인해 스프링 프로젝트를 새로 만들었다.
이때 활용한 설정 관련 내용을 공유 하도록 하겠다.
신설 프로젝트를 개요
- Spring Boot
- JDBC 커넥터 활용 DB연동
- DB : postgresql
- HikariCP 활용
* HikariCP는 히카리 커넥션 풀로 디비와 연결할때마다 커넥션을 새로 만드는게 아닌 구현되어있는 커넥션을 사용 및 반환하여 서버 부하를 줄이기 위해 사용한다.
관련 gradle dependency 목록
- org.springframework.boot:spring-boot-starter-web: 스프링 부트 웹 애플리케이션 개발에 필요한 라이브러리들을 포함하고 있습니다.
- org.springframework.boot:spring-boot-starter-test: 스프링 부트 테스트에 필요한 라이브러리들을 포함하고 있습니다.
- org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0: MyBatis를 스프링 부트 애플리케이션에서 사용할 수 있도록 지원하는 라이브러리입니다.
- org.springframework.boot:spring-boot-starter-data-jdbc: 스프링 부트 JDBC를 사용할 수 있도록 지원하는 라이브러리입니다.
- javax.xml.bind:jaxb-api:2.3.1: JAXB API를 사용하여 XML 데이터를 바인딩하는 데 필요한 라이브러리입니다.
- org.mybatis:mybatis:3.5.8: MyBatis 프레임워크의 코어 라이브러리입니다.
- org.springframework:spring-tx:5.3.9: 스프링 트랜잭션 모듈에 대한 라이브러리입니다.
- org.springframework:spring-jdbc:5.3.9: 스프링 JDBC 모듈에 대한 라이브러리입니다.
- com.zaxxer:HikariCP:4.0.3: HikariCP 커넥션 풀 라이브러리입니다.
- org.projectlombok:lombok:1.18.20: 자바 코드를 간결하게 작성할 수 있도록 지원하는 라이브러리입니다.
- org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16: JDBC 드라이버를 사용하여 SQL 쿼리 및 파라미터 로그를 출력할 수 있는 라이브러리입니다.
- com.sun.xml.bind:jaxb-core:2.3.0.1: JAXB 구현체의 코어 라이브러리입니다.
- com.sun.xml.bind:jaxb-impl:2.3.2: JAXB 구현체의 구현 라이브러리입니다.
- org.postgresql:postgresql: PostgreSQL JDBC 드라이버입니다.
상기와 같은 라이브러리들을 활용하였다.
마지막으로 피곤하니 myBatis 설정 소스를 주고 마무리 하겠다.
package com.example.demo.config;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import com.zaxxer.hikari.HikariDataSource;
import lombok.extern.slf4j.Slf4j;
//로그 남기기위한 어노테이션
@Slf4j
//해당 패키지에 있는 메퍼를 스캔하여 등록
@MapperScan(basePackages = {"com.**.test"})
//이 소스가 설정임을 알림
@Configuration
//해당 패키지에 있는 것들 중 각 어노테이션에 맞는 것들을 bean등록
@ComponentScan(basePackages = {"com.**.test"},
includeFilters = {
@Filter(type = FilterType.ANNOTATION, value = Component.class)
, @Filter(type = FilterType.ANNOTATION, value = Service.class)
, @Filter(type = FilterType.ANNOTATION, value = Repository.class)
},
excludeFilters = {
@Filter(type = FilterType.ANNOTATION, value = Controller.class)
})
public class MybatisConfig {
//bean 등록
@Bean(name="datasourceUser")
public DataSource dataSource() {
//히카리 CP 관련 bean 데이터 저장
HikariDataSource dataSource = new HikariDataSource();
dataSource.setDriverClassName("net.sf.log4jdbc.sql.jdbcapi.DriverSpy");
dataSource.setJdbcUrl("jdbc:log4jdbc:postgresql://***.***.***.***:****/***?charSet=UTF-8&prepareThreshold=1");
dataSource.setUsername("*******");
dataSource.setPassword("******");
dataSource.setMaximumPoolSize(10);
dataSource.setMinimumIdle(5);
return dataSource;
}
//DB트랜잭션 관리 빈등록
@Bean
public DataSourceTransactionManager transactionManager() {
log.info(" ### RootConfig transactionManager ### ");
return new DataSourceTransactionManager(dataSource());
}
//mtBatis와 spring 연동 빈 등록
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
log.info(" ### RootConfig sqlSessionFactory ### ");
SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
factory.setDataSource(dataSource());
//메퍼 파일 위치
factory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
//mybatis 설정 파일 위치
factory.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis/mybatis-config.xml"));
return factory.getObject();
}
}