처음에 Legacy Spring 에서 Springboot로 넘어오면서 이게 뭔가 싶었다.
적응도 안되고.. 마치 처음 배우던 C 같다는 느낌이 들어서 영.. 적응하기가..
게다가 회사에서는 기존 Spring을 버리고 Springboot를 하라고 하는 바람에 설계 부터 어떻게 해야 할지 여러가지를 참고해야 했다.
그중에서 데이터베이스 연결 부분을 어찌 해야 할지가... 머리 터지는 줄...
지금은 해놨던게 있으니 그대로 적용하는데 그 과정을 정리하고자 기록 하고자 한다.
1. application.properties 설정.
이건 yaml로 해도 상관없고 자신이 원하는 방식으로 적용 하면 된다.
jpa 에선 hikariCP 를 사용해서 데이터베이스 연결하는 방법을 많이 사용하는 추세라 그 방법을 사용했다.
Database는 Mysql 을 사용했으며 Maria DB의 경우 거의 비슷하다고 봐도 된다.
spring.datasource.hikari.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.hikari.jdbc-url=jdbc:log4jdbc:mysql://xxxx.xxxx.xxxx.xxxx:3306/DB?useUnicode=true&characterEncoding=UTF8&useSSL=false&allowMultiQueries=true
spring.datasource.hikari.username=사용자명
spring.datasource.hikari.password=비밀번호
spring.datasource.hikari.auto-commit=true # true / false는 사용자가 지정하면 됨
2. @Configuration 설정
개발자가 지정한 패키지 안에 데이터베이스 설정을 위한 클래스를 적당한 위치에 작성 한다.
@PropertySource("classpath:/application.properties")
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = "베이스패키지 지정",
entityManagerFactoryRef = "entityManagerFactory",
transactionManagerRef = "jpaTransactionManager")
@Slf4j
@Configuration
public class DatabaseConfiguration {
@Autowired
ApplicationContext applicationContext;
@Primary
@Bean(name="hikariConfig1")
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public HikariConfig mariaHikariConfig(){
return new HikariConfig();
}
@Primary
@Bean(name="mybatisConfig")
@ConfigurationProperties(prefix = "mybatis.configuration")
public org.apache.ibatis.session.Configuration MybatisConfig() {
return new org.apache.ibatis.session.Configuration();
}
@Primary
@Bean(name = "datasource")
public DataSource mariaDataSource() throws Exception{
DataSource dataSource = new HikariDataSource(mariaHikariConfig());
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) throws Exception {
return builder.dataSource(this.mariaDataSource()).packages("패키지 지정.*").build();
}
@Primary
@Bean(name = "sqlSessionFactory")
public SqlSessionFactory mariaSqlSeissionFactory(@Qualifier("datasource") DataSource dataSource) throws Exception{
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(mariaDataSource());
sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:sqlMap/**/*_SQL.xml"));
sqlSessionFactoryBean.setTypeAliasesPackage("기본패키지.*");
sqlSessionFactoryBean.setConfiguration(MybatisConfig());
return sqlSessionFactoryBean.getObject();
}
@Primary
@Bean(name = "sqlSessionTemplate")
public SqlSessionTemplate SqlSessionTemplate(@Qualifier("sqlSessionFactory")SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
@Primary
@Bean(name = "transactionManager") // mybatis 사용시 사용하는 트랜잭션 매니저
public DataSourceTransactionManager TransactionManager(@Autowired @Qualifier("datasource") DataSource dataSource) throws Exception{
return new DataSourceTransactionManager(dataSource);
}
@Primary
@Bean(name = "jpaTransactionManager")
public PlatformTransactionManager jpaTransactionManager(@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) throws Exception{
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory);
return transactionManager;
}
}
Insert / Update / Delete는 JPA 를 이용하고 select 는 Mybatis 를 사용하기 위해 위와 같이 설정을 했다.
위의 mybatis.configuration 은 mybatis 설정시 사용 옵션들을 application.properties에 지정해 놓은 것을 적용시키는데 본인은 다음과 같이 camel case를 적용하기 위해 다음과 같이 설정을 넣어 두었다.
mybatis.configuration.map-underscore-to-camel-case=true
위와 같이 설정 하면 Springboot 에서 데이터베이스 연결을 위한 기본 설정은 끝난 셈이다.
다음에는 logback 을 사용하여 로그를 남기는 설정 부분을 알아보기로 한다.


덧글