오늘은 SpringBoot jdbc 설정에 대해 포스팅 하려고 합니다.
SpringBoot에서 jdbc를 설정하는 방법들은 많이 있습니다.
오늘은 그 방법들중에 하나이며, 2개 이상의 DB연결이 필요할 경우에도
다중 jdbc를 연동하는데 있어서 편리한 방법을 사용했습니다.
본 포스팅에서는 mysql DB를 사용하여 진행하겠습니다.
물론 mysql 이외의 oracle, postgresql, tibero등의 jdbc 설정들 또한 동일하게 가능 합니다.
1. Spring 또는 SpringBoot에서 mysql을 사용하기 위해 pom.xml에 라이브러리를 추가합니다.
// pom.xml
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.5</version>
</dependency>
2. jdbc driver 연결을 하기 위한 설정을 진행합니다.
// src/main/resources/application.yaml
## mysql jdbc 정보
mysql.db.jdbc.driver: com.mysql.jdbc.Driver
mysql.db.jdbc.url : jdbc:mysql://10.11.15.35:3306/databaseName
mysql.db.jdbc.username : mysqlUserName
mysql.db.jdbc.password : mysqlPassword
// src/main/resources/MysqlMapClientManager.xml
<?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>
<properties resource="application.yaml"> </properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${mysql.db.jdbc.driver}" />
<property name="url" value="${mysql.db.jdbc.url}" />
<property name="username" value="${mysql.db.jdbc.username}" />
<property name="password" value="${mysql.db.jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="sql/AdPolicyMapper.xml" />
</mappers>
</configuration>
// MysqlDbConnFactory.java
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
public class MysqlDbConnFactory {
private static Logger logger =
Logger.getLogger(MysqlDbConnFactory.class);
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "MysqlMapClientManager.xml";
Reader reader = Resources.getResourceAsReader(resource);
if(sqlSessionFactory == null) {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
}
logger.info("Create mysql session!!." + sqlSessionFactory.getConfiguration().getEnvironment());
reader.close();
}catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
}
위의 1,2의 설정이 끝났다면, mysql jdbc연결을 위한 기본적인 설정은 끝난 것입니다.
이어서 사용하는 방법에 대해 진행하겠습니다.
프로젝트 구성에 따라 조금씩 라이프사이클이 바뀔 수 있기 때문에 저와 다르게 구성이 되신 분들은
본인의 프로젝트에 맞게 구조를 맞추어야 합니다.
현재 Spring 라이프 사이클 구조의 DB를 사용하기 위해 다음과 같은 구조의 파일들이 필요합니다.
- Vo
- Dao
- Service
- ServiceImple
- Controller
3. Vo 구성
// AdPolicyVo.java
import java.util.Date;
public class AdPolicyVo {
private String dncode;
private String attribute_key;
private String value;
private String isuse;
private String create_dtm;
public String getDncode() {
return dncode;
}
public void setDncode(String dncode) {
this.dncode = dncode;
}
public String getAttribute_key() {
return attribute_key;
}
public void setAttribute_key(String attribute_key) {
this.attribute_key = attribute_key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getIsuse() {
return isuse;
}
public void setIsuse(String isuse) {
this.isuse = isuse;
}
public String getCreate_dtm() {
return create_dtm;
}
public void setCreate_dtm(String create_dtm) {
this.create_dtm = create_dtm;
}
@Override
public String toString() {
return "AdPolicyVo [dncode=" + dncode + ", attribute_key=" + attribute_key + ", value=" + value + ", isuse="
+ isuse + ", create_dtm=" + create_dtm + "]";
}
}
4. Dao 구성
// AdpolicyDao.java
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;
import kr.goodmit.clovir.engine.client.model.Result;
import kr.goodmit.clovir.vdiui.model.AdPolicyVo;
public class AdpolicyDao {
private SqlSessionFactory sqlSessionFactory = null;
private SqlSession sqlSession = null;
Logger logger = Logger.getLogger(this.getClass());
public AdpolicyDao(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
public List<AdPolicyVo> sAdPolicyList(AdPolicyVo adPolicyVo) {
SqlSession session = sqlSessionFactory.openSession(true);
List<AdPolicyVo> result = null;
try {
result = session.selectList("AdPolicyMapper.sAdPolicyList", adPolicyVo);
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
return result;
}
public int iAdPolicy(AdPolicyVo adPolicyVo) {
SqlSession session = sqlSessionFactory.openSession(true);
int result = 0;
try {
result = session.update("AdPolicyMapper.iAdPolicy", adPolicyVo);
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
return result;
}
}
5. Service 구성
// VdiMgmtService.java
import kr.goodmit.clovir.vdiui.model.AdPolicyVo;
public interface VdiMgmtService {
public List<AdPolicyVo> getAdPolicyList(AdPolicyVo adPolicyVo);
public int setAdPolicy(AdPolicyVo adPolicyVo);
}
6. ServiceImpl 구성
// VdiMgmtServiceImpl.java
@Service
public class VdiMgmtServiceImpl implements VdiMgmtService {
private final Logger logger = Logger
.getLogger(VdiMgmtServiceImpl.class);
@Override
public List<AdPolicyVo> getAdPolicyList(AdPolicyVo adPolicyVo){
List<AdPolicyVo> AdPolicyList;
AdpolicyDao adpolicyDao = new AdpolicyDao(MysqlDbConnFactory.getSqlSessionFactory());
AdPolicyList = adpolicyDao.sAdPolicyList(adPolicyVo);
return AdPolicyList;
}
@Override
public int setAdPolicy(AdPolicyVo adPolicyVo){
int result = 0;
AdpolicyDao adpolicyDao = new AdpolicyDao(MysqlDbConnFactory.getSqlSessionFactory());
SimpleDateFormat format1 = new SimpleDateFormat ( "yyyy-MM-dd");
Calendar time = Calendar.getInstance();
String format_time1 = format1.format(time.getTime());
adPolicyVo.setCreate_dtm(format_time1);
result = adpolicyDao.iAdPolicy(adPolicyVo);
return result;
}
}
7. Controller 구성
// AdUserSettingController.java
@Controller
@RequestMapping(value = "/admin")
public class AdUserSettingController {
private final Logger logger = Logger.getLogger(AdUserSettingController.class);
@GET
@RequestMapping(value = "/userauth/adPolicyList.do")
public ModelAndView adPolicyList(Model model, HttpSession session,
HttpServletRequest req, HttpServletResponse res) throws Exception {
logger.debug("########## /admin/userauth/adPolicyList.do start ##########");
ModelAndView mv = new ModelAndView("userauthset/adPolicyList");
logger.debug("########## /admin/userauth/adPolicyList.do end ##########");
return mv;
}
@GET
@RequestMapping(value = "/userauth/adPolicyList.data")
public @ResponseBody List<AdPolicyVo> adPolicyListData(Model model, HttpSession session, HttpServletRequest request, HttpServletResponse response, UserAttrVo userAttrVo) throws Exception {
logger.debug("########## /admin/userauth/adPolicyList.data start ##########");
List<AdPolicyVo> AdPolicyList;
AdPolicyVo adPolicyVo = new AdPolicyVo();
AdPolicyList = vdiMgmtService.getAdPolicyList(adPolicyVo);
logger.debug("AdPolicy List size: " + AdPolicyList.size());
logger.debug("########## /admin/userauth/adPolicyList.data end ##########");
return AdPolicyList;
}
}
위의 내용을 모두 완료 하셨다면 정상적으로 DB를 사용하여 select, insert, update, delete 등의 쿼리를
자유롭게 사용하고 jsp까지 활용하여 UI에 따라 DB를 사용할 수 있습니다.
또한 여러개의 DB 사용이 필요할 경우 1~2번의 내용을 설정만 바꾸어 똑같이 사용하면
2개 이상의 JDBC연결이 가능 합니다.
이해가 안되거나 진행 과정에서 오류가 나타나거나 더 좋은 방법 또는 이견이 있으실때
댓글로 작성해주시면 감사하겠습니다.
지금까지 SpringBoot mysql jdbc driver 설정 및 사용방법에 대한 포스팅이였습니다.
'Develope > Spring' 카테고리의 다른 글
[SpringBoot] 엑셀(Excel) 파일 업로드 방법(poi 라이브러리) (18) | 2020.02.14 |
---|---|
[SpringBoot] Ajax 배열, 리스트로 값 넘기기 (0) | 2020.02.14 |
[Spring] @RequestMapping produces를 이용한 Response Content-Type 변경 (0) | 2019.09.20 |
[SpringBoot] Common application properties 부록 (0) | 2019.06.04 |
[SpringBoot] @PropertySource - 설정값 읽기 (0) | 2019.06.04 |