SpringFramework/Spring

class 파일내 DataSource 설정

lovineff 2020. 11. 11. 18:18

프로젝트이 vault 기능이 필요하여, 부득이하게 Class 파일에서 DataSource 설정이 필요한 경우 아래와같이 작성한다

@Configuration
@EnableTransactionManagement
public class DataSourceConfig {

    @Autowired
    private ApplicationContext applicationContext;

    @Value("#{new Integer('${db.connection.count}')}")		// 설정 파일내 개수 적용(prod, dev 분할용)
    private int dbConnectionSize;

    @Bean(name = "dataSource")
    public DataSource dataSource() throws Exception {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");	// MySql인 경우
        dataSource.setUrl("");
        dataSource.setUsername("");
        dataSource.setPassword("");
        // Connection Count
        dataSource.setInitialSize(dbConnectionSize);
        dataSource.setMaxTotal(dbConnectionSize);
        dataSource.setMaxIdle(dbConnectionSize);
        dataSource.setMinIdle(dbConnectionSize);
        dataSource.setMaxWaitMillis(10000);
        // validation
        dataSource.setValidationQuery("SELECT 1");
        dataSource.setTestOnBorrow(false);
        dataSource.setTestOnReturn(false);
        // Connetion pool 검사 testWhileIdle 설정. 'TimeBetweenEvictionRunsMillis'마다 'NumTestsPerEvictionRun'개의 connection 꺼내 'ValidationQuery'를 날려 확인
        dataSource.setTestWhileIdle(true);                      // Evictor 스레드가 실행될 때 (timeBetweenEvictionRunMillis > 0) 커넥션 풀 안에 있는 유휴 상태의 커넥션을 대상으로 테스트 실행
        dataSource.setTimeBetweenEvictionRunsMillis(100000);    // Evictor 가 동작하는 간격 (default = -1, 비활성화)
        dataSource.setNumTestsPerEvictionRun(5);                // Evictor 동작 시 한 번에 검사할 커넥션의 개수 (default = 3)
        dataSource.setMinEvictableIdleTimeMillis(-1);           // 사용하지 않는 커넥션 제거 (defatult - -1, 비활성화)

        return dataSource;
    }

    @Bean(name="sqlSessionFactory")
    public SqlSessionFactoryBean sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource());
        sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:mybatis/mapper/**/*.xml"));
        sqlSessionFactoryBean.setConfigLocation(applicationContext.getResource("classpath:/mybatis/mybatis-config.xml"));
        return sqlSessionFactoryBean;
    }

    @Bean(name="dataSourceTransactionManager")
    public DataSourceTransactionManager dataSourceTransactionManager(@Qualifier("dataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name="sqlSession")
    public SqlSessionTemplate sqlSession(@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

 

HikariCP 사용시 적용 방안(SpringBoot의 경우 HikariCP를 사용하자)

@Bean(name = "dataSource")
public DataSource dataSource() throws Exception {
    HikariDataSource hikariDataSource = new HikariDataSource();
	hikariDataSource.setDriverClassName(driverClassName);
	hikariDataSource.setJdbcUrl(jdbcUrl);
	hikariDataSource.setUsername(vault.getUsername());
	hikariDataSource.setPassword(vault.getPassword());
	// Connection Properties
	hikariDataSource.setConnectionTimeout(30000);   // default 30000
	hikariDataSource.setMaximumPoolSize(10);        // default 10
	hikariDataSource.setMinimumIdle(10);            // default maximumPoolSize, hikrariCP에서는 maximum-pool-size과 minimum-idle 값을 같은 값으로 지정하는것을 권장
	//        hikariDataSource.setIdleTimeout(600000);      // pool에서 일을 안하는 커넥션을 유지하는 시간, default 600000, minimum-idle이 maximum-pool-size 보다 작을때만 설정
	//        hikariDataSource.setMaxLifetime();              // 커넥션 최대 수명 시간 default 1800000
    return dataSource;
}

 

'SpringFramework > Spring' 카테고리의 다른 글

ModelMapper 사용 법  (0) 2020.11.16
Swagger2 설정 및 사용  (0) 2020.11.13
REST API  (0) 2020.06.10
Spring Security 세션정보 조회  (0) 2020.06.09
Spring Security 설정  (0) 2020.06.09