반응형
이제부터는 2) 번에서 했던 코드를 커넥션을 팩토리 패턴을 이용해 받아오도록 해보겠습니다.
코드는 거의 동일한데 커넥션을 받아온다는 것만 다릅니다.
제일 먼저 Resource 소스 폴더에 dbinfo.properties 파일을 생성합니다.
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/본인DB이름
user=아이디
password=비밀번호
initialSize=2
maxTotal=2
maxWait=2000
connectionMessage=connected!
이어 적당한 위치에 ConnectionFactory 만들어주는 코드도 생성합니다.
package kr.or.ddit.utils.db;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ResourceBundle;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
/**
* Factory Object[Method] Pattern
* : 객체 생성을 전담하는 객체를 운영하는 구조.
* @author shane
*/
public class ConnectionFactory {
private static String driverClassName;
private static String url;
private static String user;
private static String password;
private static String connectionMessage;
private static DataSource ds;
static {
// Properties properties = new Properties();
// try(
// InputStream is = ConnectionFactory.class.getResourceAsStream("dbinfo.properties");
// ) {
// properties.load(is);
ResourceBundle bundle = ResourceBundle.getBundle("dbinfo");
driverClassName = bundle.getString("driverClassName");
url = bundle.getString("url");
user = bundle.getString("user");
password = bundle.getString("password");
connectionMessage = bundle.getString("connectionMessage");
int initialSize = Integer.parseInt(bundle.getString("initialSize"));
int maxTotal = Integer.parseInt(bundle.getString("maxTotal"));
long maxWait = Integer.parseInt(bundle.getString("maxWait"));
ds = new BasicDataSource();
((BasicDataSource)ds).setDriverClassName(driverClassName);
((BasicDataSource)ds).setUrl(url);
((BasicDataSource)ds).setUsername(user);
((BasicDataSource)ds).setPassword(password);
// 풀링을 하려면, 몇개를 만들어 둘지 미리 셋팅을 해야함.
((BasicDataSource)ds).setMaxTotal(initialSize);
((BasicDataSource)ds).setInitialSize(maxTotal);
((BasicDataSource)ds).setMaxWaitMillis(maxWait);
}
public static Connection getConnection() throws SQLException{
System.out.println(connectionMessage);
return ds.getConnection();
// return DriverManager.getConnection(url, user, password);
}
}
Apache Commons의 dbcp2를 이용했기 때문에 dependency를 추가하거나 jar 파일을 library에 추가해줘야 합니다.
수업 때 배운 커넥션 풀링까지 적용시켰습니다. 풀링을 적용하지 않는다면 getConnection으로 바로 반환해 줄 수도 있습니다.
중요한 건, ResourceBundle.getBundle("dbinfo")에서 괄호 안에 들어가는 데이터는 위에서 만든 dbinfo.properties 파일의 Qualified name이 들어가야 합니다. 맨 마지막에 확장자 명은 뺍니다.
예를 들어서, res/db/dbinfo.properties 파일로 저장되어 있다면, db.properties라고 써주시면 됩니다.
아래의 dbinfo 파일과 Factory 파일을 잘 생성해 두었다면,
2번에서 했던 코드를 커넥션 받는 부분만 변경해서 돌려봅니다
package kr.or.ddit.test;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import kr.or.ddit.utils.db.ConnectionFactory;
public class Test03ConnectionFactory {
public static void main(String[] args) {
try(
Connection conn = ConnectionFactory.getConnection();
) {
String sql = "select * from alba";
Statement statement = conn.createStatement();
ResultSet result = statement.executeQuery(sql);
while(result.next()) {
String al_id = result.getString(1);
String al_name = result.getString(2);
int al_age = result.getInt(3);
String al_zip = result.getString(4);
String al_addr1 = result.getString("al_addr1");
String al_addr2 = result.getString("al_addr2");
String al_hp = result.getString("al_hp");
String gr_code = result.getString("gr_code");
String al_gen = result.getString("al_gen");
String al_mail =result.getString("al_mail");
String al_career = result.getString("al_career");
String al_spec = result.getString("al_spec");
String al_desc = result.getString("al_desc");
String al_img = result.getString("al_img");
System.out.printf("%s %s %d %s %s %s %s %s %s %s %s %s %s %s \n",al_id,al_name,al_age,al_zip,al_addr1,al_addr2,al_hp,gr_code,al_gen,al_mail,al_career,al_spec,al_desc,al_img);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
커넥션 팩토리 패턴 적용이 완료되었습니다.
반응형
'Programming > JPA ⁄ Spring' 카테고리의 다른 글
JDBC 와 MYSQL 연동하기 6) MVC 패턴 적용하기 (0) | 2021.04.17 |
---|---|
JDBC 와 MYSQL 연동하기 5) FrontController 패턴 적용하기 (0) | 2021.04.16 |
JDBC 와 MYSQL 연동하기 4) 서블릿으로 출력하기 (0) | 2021.04.16 |
JDBC 와 MYSQL 연동하기 2) 간단한 쿼리문 실행해보기 (0) | 2021.04.15 |
JDBC 와 MYSQL 연동하기 1) 커넥션 생성 (0) | 2021.04.15 |