일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ubuntu
- 8443
- https
- phpmyadmin
- Cent
- HLS
- mysql
- mount
- haproxy.cfg
- yum
- 방화벽
- CentOS
- haproxy
- youtube-dl
- iptables
- firewall
- letsencrypt
- 인증서
- centos7
- Tomcat
- YouTube
- MariaDB
- SSL
- Maria
- 도커
- vsftpd
- db
- docker
- docker-compose
- nginx
- Today
- Total
개발자의뇌
mybatis 에서 procedure call 호출 본문
마이바티스 sql mapper에서 procedure를 호출하기 위해 구글링하여 나온 아래 코드를 넣어 실행하였다.
<update id="testProc" statementType="CALLABLE" parameterType="HashMap">
{ call sp_test_procedure(
#{p1},
#{p2,jdbcType=VARCHAR},
#{p3},
#{p4,jdbcType=VARCHAR},
#{p5,jdbcType=VARCHAR}
)
}
</update>
하지만 서버에서는 call 문법이 틀렸다는 메시지가 나온다.
당시 마이바티스 실행 환경은
jdk8, tomcat8.5, mybatis-3.4.6.jar, mariadb-java-client-2.2.3.jar 이렇게 되어 있었다.
얼마 더 삽질하다가 구글링을 해보니 mysql-connector 를 사용하면 된다고 한다.
하여 기존 db들은 mariadb-client를 계속 사용하고
call 하는 부분만 따로 db 연결을 분리하여 설정 부분에서 mysql-connector 를 사용하도록 하였다.
한데 mysql-connector-java-8.0.19.jar 버전을 사용하니
드라이버로 사용중인 com.mysql.jdbc.Driver 가 deprecated 되었다고 나온다.
관련 문서를 확인해 보니 com.mysql.cj.jdbc.Driver 를 사용해야 한다고 한다.
하여 드라이버명을 맞춰주니 이번엔 db 연결이 안된다고 에러가 나온다.
또 찾아보니 jdbc url에 serverTimezone=UTC 파라메터를 넣어야 연결된다고 한다.
해당 파라메터를 연결하니 db 연결 성공, 그리고 procedure 호출도 성공하였다.
db 프로시저 하나 호출하는데 생각보다 삽질을 많이 하게 되어 정리해 놓는다.
요약하자면
1. 마이바티스 + mariadb-client 조합은 sql mapper에서 프로시저 call 호출방법 못찾음
2. 마이바티스 + mysql-connector (v8.0.19) 조합은 프로시저 call 호출이 가능함!
3. 하지만 mysql-connector 일정 버전 이상에서는 드라이버 이름이 변경됨
이전: com.mysql.jdbc.Driver -> 변경: com.mysql.cj.jdbc.Driver
4. 그리고 또 하나 변경된 것은 jdbc url에 serverTimezone=UTC 파라메터를 넣어야 db 연결이 됨
5. 위 설정들을 모두 잘 하였다면 call 호출 가능함
아래는 db 연결 config xml 일부
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true" />
이전처럼 드라이버명을 com.mysql.jdbc.Driver를 사용하려면 mysql-connector 버전을 5버전대로 사용하면 될 것 같다.
최근 구글링 하면서 자주 느끼는 건데 문제를 검색하면 원인설명은 없고 해결만 있다보니
복붙하여 테스트 하는 시간만 증가하고, 효율은 많이 떨어지는 것 같다.
mariadb-client 에서 프로시저 호출 기능이 없을것 같진 않은데
마이바티스가 mariadb-client 의 call 호출 명령을 지원하지 않는건지 찾아볼 필요가 있다.