Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[Java] JDBC드라이버 의존성을 추가하고, Connection 객체를 생성해 ConnectionPool 구현하기 본문
Backend/자바
[Java] JDBC드라이버 의존성을 추가하고, Connection 객체를 생성해 ConnectionPool 구현하기
Gaejirang-e 2023. 8. 6. 19:32
⭐.ConnectionPool.java
public class ConnectionPool {
private List<Connection> connectionpool;
private List<Connection> usedConnections = new ArrayList<>();
static ResourceBundle rb;
private static int INITIAL_POOL_SIZE = 3;
static {
rb = null;
rb = ResourceBundle.getBundle("mysql", Locale.KOREA);
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public ConnectionPool(List<Connection> connectionPool) {
this.connectionPool = connectionPool;
}
// Connection 객체 create
private static Connection createConnection(String url, String user, String password) thorows SQLException {
return DriverManager.getConnection(url, user, password);
}
// ConnectionPool create (INTIAL_POOL_SIZE만큼의 크기를 가지는)
public static ConnectionPool create() throws SQLException {
String url = rb.getString("url");
String user = rb.getString("user");
String password = rb.getString("password");
List<Connection> pool = new ArrayList<>(INITIAL_POOL_SIZE);
for(int i = 0; i < INITIAL_POOL_SIZE; i++) { //POOL_SIZE만큼의 Connection 객체를 미리 만들어 놓는다.
pool.add(createConnection(url, user, password));
}
return new ConnectionPool(pool); //connectionPool 멤버필드 초기화
}
public Connection getConnection() { //db와 연결
Connection connection = connectionPool.remove(connectionPool.size()-1); //사용되고 있는 Connection 객체를 connectionPool에서 빼주고,
userConnections.add(connection); //사용되고 있는 Connection 객체를 더해준다
return connection; //연결에 성공하면 연결된 Connection 객체를 반환, 이 객체를 사용하여 db와 통신 가능
}
public boolean releaseConnection(Connection connection) {
connectionPool.add(connection); //사용된 Connection객체를 connectionPool에 반환
return usedConnections.remove(connection);
}
public int getSize() { //전체 Connection객체 수
return connectionPool.size() + usedConnections.size();
}
public int getUseSize() { //사용 가능한 Connection객체 수
return connectionPool.size();
}
}
⭐. resources/mysql.properties
url=jdbc:mysql://localhost:3306/shopdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Seoul
user=user01
password=123456
> 🦔 ResourceBundle은 텍스트 리소스를 관리해주는 클래스다 (with 다국어 지원)
properties 파일에 저장된 텍스트 리소스를 로드하여
애플리케이션에서 사용할 수 있게 해준다.
ResourceBundle.getBundle("mysql", Locale.KOREA); // 📂resources 디렉터리 내부에 있는 파일을 감지
> 🦔 DriverManager는 'JDBC드라이버'를 관리하는 클래스다.
JDBC드라이버를 등록 및 데이터베이스와 연결을 생성하고 관리한다.
☁️ JDBC 드라이버 의존성 추가 in Maven🦣
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
'Backend > 자바' 카테고리의 다른 글
[Java] 정규표현식(regExp)과 Pattern 클래스로 검증 (0) | 2023.08.09 |
---|---|
[Java] 날짜 시간 클래스 LocalDateTime과 형식클래스 DateTimeFormatter (0) | 2023.08.09 |
[Java] 모듈: 패키지 은닉과 전이 의존 (0) | 2023.08.05 |
[Java] eclipse에서 jar 압축파일 형태의 라이브러리 생성 및 적용 (0) | 2023.08.04 |
[Java] 한정된 값을 가지는 열거(enum) 타입 (0) | 2023.08.03 |