SpringBoot : DB 연결
기존 : DBCP 사용 (데이터베이스 커넥션 풀)
HiKariCp -> 속도가 빠르고 메모리 별로 차지하지 않음 (Boot 사용 시 대부분 사용)
우리 = HiKariCp + Mybatis 사용할 예정
Ctrl + Shift + F5 (Refresh Gradle Project 꼭 하기)
들어와 있다면 잘 한 것
CF ) 보통 파일을 따로 만듬! = 개발, 운영 계정명 / 비밀번호 다를 수 있어서
개발환경 : dev.properties
운영 : prod.properties
- 나중에 프로젝트할 때, .gitignore에 config.properties 넣어야 함!
#오라클 DB 연결 정보
spring.datasource.hikari.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.hikari.jdbc-url=jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.hikari.username=project
spring.datasource.hikari.password=project1234
# HikariCP Connection Pool Properties
#풀이 연결을 사용할 수 있을 때까지 대기하는 최대 시간(ms)을 지정
spring.datasource.hikari.connection-timeout=30000
#풀의 최대 연결 수 설정
spring.datasource.hikari.maximum-pool-size=20
#연결이 풀에서 유휴 상태로 있을 수 있는 최대 시간(ms)을 지정
spring.datasource.hikari.idle-timeout=600000
#연결 풀의 이름을 지정
spring.datasource.hikari.pool-name=MyHikariCP
#자동 커밋 끄기
spring.datasource.hikari.auto-commit=false
package edu.kh.project.common.config;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
@Configuration // @Configuration : 구성
// 스프링 어플리케이션을 구성하기 위한 설정용 Bean 생성 클래스
@PropertySource("classpath:/config.properties")
public class DBConfig {
// import org.springframework.context.ApplicationContext;
@Autowired
private ApplicationContext applicationContext; // application scope 객체
@Bean
// - 개발자가 수동으로 bean을 등록하는 어노테이션
// - @Bean 어노테이션이 작성된 메서드에서 반환된 객체는
// Spring Container가 관리함
@ConfigurationProperties(prefix = "spring.datasource.hikari") // 접두사가 spring.datasource.hikari로 시작되는 것 다 읽어와 hikariConfig 객체를 만든다는 의미
// properties 파일의 내용을 이용해서 생성되는 bean을 설정하는 어노테이션
// prefix를 지정하여 spring.datasource.hikari으로 시작하는 설정을 모두 적용
public HikariConfig hikariConfig() { // Ctrl + Space = 메소드 이름 추천해줌
return new HikariConfig();
}
@Bean
public DataSource dataSource(HikariConfig config) {
// 매개변수에 bean이 자동으로 주입된다(DI)
DataSource dataSource = new HikariDataSource(config);
return dataSource;
}
}
-> 로그에 오류가 뜨지 않으면 성공!
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0/EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="jdbcTypeForNull" value="NULL" />
</settings>
</configuration>
내부적으로 Member라는 dto 자동생성해줌 -> 별칭은 소문자, 대문자 모두 가능!
package edu.kh.project.common.config;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
@Configuration // @Configuration : 구성
// 스프링 어플리케이션을 구성하기 위한 설정용 Bean 생성 클래스
@PropertySource("classpath:/config.properties")
public class DBConfig {
// import org.springframework.context.ApplicationContext;
@Autowired
private ApplicationContext applicationContext; // application scope 객체
@Bean
// - 개발자가 수동으로 bean을 등록하는 어노테이션
// - @Bean 어노테이션이 작성된 메서드에서 반환된 객체는
// Spring Container가 관리함
@ConfigurationProperties(prefix = "spring.datasource.hikari") // 접두사가 spring.datasource.hikari로 시작되는 것 다 읽어와 hikariConfig 객체를 만든다는 의미
// properties 파일의 내용을 이용해서 생성되는 bean을 설정하는 어노테이션
// prefix를 지정하여 spring.datasource.hikari으로 시작하는 설정을 모두 적용
public HikariConfig hikariConfig() { // Ctrl + Space = 메소드 이름 추천해줌
return new HikariConfig();
}
@Bean
public DataSource dataSource(HikariConfig config) {
// 매개변수에 bean이 자동으로 주입된다(DI)
DataSource dataSource = new HikariDataSource(config);
return dataSource;
}
////////////////////////////Mybatis 설정 추가 ////////////////////////////
//SqlSessionFactory : SqlSession을 만드는 객체
@Bean
public SqlSessionFactory sessionFactory(DataSource dataSource) throws Exception{
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
//매퍼 파일이 모여있는 경로 지정
sessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:/mappers/**.xml"));
//별칭을 지정해야하는 DTO가 모여있는 패키지 지정
//-> 해당 패키지에 있는 모든 클래스가 클래스명으로 별칭이 지정됨
//sessionFactoryBean.setTypeAliasesPackage("edu.kh.project.member.model.dto, edu.kh.project.board.model.dto");
sessionFactoryBean.setTypeAliasesPackage("edu.kh.project.member.model.dto");
//마이바티스 설정 파일 경로 지정
sessionFactoryBean.setConfigLocation(applicationContext.getResource("classpath:mybatis-config.xml"));
//SqlSession 객체 반환
return sessionFactoryBean.getObject();
}
//SqlSessionTemplate : 기본 SQL 실행 + 트랜잭션 처리
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sessionFactory) {
return new SqlSessionTemplate(sessionFactory);
}
//DataSourceTransactionManager : 트랜잭션 매니저
@Bean
public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
-> 로그에 오류가 뜨지 않으면 성공!
package edu.kh.project.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@Configuration
//@EnableWebSecurity // 해당 어노테이션 작성 시, 보안 화면 뜸.
public class SecurityConfig {
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
}
package edu.kh.project;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
// 보안 관련된 자동 설정 사용 X // 해당 exclude 미작성 시, 보안 화면 뜸.
@SpringBootApplication(exclude = SecurityAutoConfiguration.class) // Spring Boot Application을 만들고, 수행하는데 필요한
// 필수 어노테이션을 모아둔 (최상위) 어노테이션
public class BoardProjectBootApplication {
public static void main(String[] args) {
SpringApplication.run(BoardProjectBootApplication.class, args);
}
}