azure

Azure database 와 jdbc 연동 (Intellj)

샐님 2023. 7. 21. 16:42
728x90
반응형

인프런에서 김영한 님은 교육용으로 h2 database 를 사용하시던데 난 나중에 배포용으로 쓰기 위해 좀 더 익숙한 mssql 을 연동해볼려 시도했다. 

에러

com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user <username>.

 

디비 연결하는데 계속 오류가 나서 구글해보니 보안문제라는 글이 많길래 시도 해볼려고 했으나 잘 되지않았다. 몇시간 한참뒤지다가

사용할 azure database에 적속해 연결 문자열 -> jdbc를 클릭하고 복사해 dataSource 의 setJdbcUrl 에 파마리터로 넘겨주니 연결이 잘된다.

package hello.dbtest;

import com.zaxxer.hikari.HikariDataSource;
import hello.dbtest.domain.Member;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.jdbc.support.JdbcUtils;
import java.sql.*;

import static hello.dbtest.connection.ConnectionConst.*;
@Slf4j
public class DbTest {

    HikariDataSource dataSource;

    @BeforeEach
    void beforeEach() {
        
        //커넥션 풀링
        dataSource = new HikariDataSource();
       
        dataSource.setJdbcUrl(연결문자열);
    
    }

    @Test
   void save() throws SQLException {
        String sql = "insert into member(member_id, name) values (?, ?)";

        Connection con = null;
        PreparedStatement pstmt = null;

        try {
            con = getConnection();
            pstmt = con.prepareStatement(sql);
            pstmt.setLong(1, 1);
            pstmt.setString(2, "하늘");
            pstmt.executeUpdate();
            //return member;
        } catch (SQLException e) {
           log.error("db error", e);
            throw e;
        } finally {
            close(con, pstmt, null);
        }

    }
    private void close(Connection con, Statement stmt, ResultSet rs) {
        JdbcUtils.closeResultSet(rs);
        JdbcUtils.closeStatement(stmt);
        // 주의! 트랜잭션 동기화를 사용하려면 DataSourceUtils를 사용.
        DataSourceUtils.releaseConnection(con,dataSource);
        //  JdbcUtils.closeConnection(con);
    }

    private Connection getConnection() throws SQLException {
        // 주의! 트랜잭션 동기화를 사용하려면 DataSourceUtils 사용해야함. 트랜잭션 동기화에 보관된커넥션을 꺼낸다.
        // 트랜잭션 동기화 매니저 : 멀티쓰레드 상황에서 안전하게 커넥션을 동기화 할 수 있게 한다.
        Connection con = DataSourceUtils.getConnection(dataSource);
        log.info("get connection={}, class={}", con, con.getClass());
        return con;
    }
}

 

이로써 이틀간 Azure database 생성하고 jdbc 까지 연동은 끝이 났다!

처음에 데이터베이스 로그인 오류에러났을 때 다른 블로그의  jdbcurl 을 사용했는데 그러지말고 꼭 azure 에서 연결 문자열 을 사용하자.

이거 때문에 엄청 해맷다 ㅜ.ㅠ 간단한것을... ㅜㅜ

 

728x90
반응형