Enum 내부에서 getConnection()을 동기화해야합니까?다른 데이터베이스에 연결하는 데 사용되는 enum 상수의 스레드 안전
어느 것이 안전합니까?
첫째 :
public enum DBConnection {
POSTGRESQL("jdbc:postgresql://localhost:5432/mydb", "vagrant", "vagrant"),
MYSQL("jdbc:mysql://localhost:3306/mydb", "vagrant", "vagrant");
DBConnection(String host, String user, String password) {
this.host = host;
this.user = user;
this.password = password;
}
private final String host;
private final String user;
private final String password;
private Connection connection;
public Connection getConnection() throws SQLException {
if (connection == null || connection.isClosed()) {
connection = DriverManager.getConnection(host, user, password);
}
return connection;
}}
또는 두 번째, 동기화 호출 및 휘발성 변수 :
private volatile Connection connection;
public synchronized Connection getConnection() throws SQLException {
if (connection == null || connection.isClosed()) {
connection = DriverManager.getConnection(host, user, password);
}
return connection;
}
연결 호출, 예를 들면 :
try (Connection connection = DBConnection.POSTGRESQL.getConnection()) {
// Prepared statement etc
}
} catch (SQLException ignored) {}
나는 오히려 새로운 연결을 매번 반환 할 것이라고 생각합니다. – Axel
@ Axel, Yea, 나도 알아,하지만이 예제는 Pluralsite 과정에서 나온거야. 작성자는 위와 같이 연결을 처리합니다. –
@JanuszAgh이 사이트의 첫 번째 질문이므로 [내 질문에 대한 답변] (https://stackoverflow.com/help/someone-answers)을 읽어보십시오. 도움이되었던 답변을 upvote하는 것은 좋은 예절로 간주됩니다. 추가 설명이 필요하면 질문에 답변했거나 답변에 의견을 남기면 답변을 수락 할 수도 있습니다. 내 대답을보고 도움이 더 필요하면 알려주십시오. 그렇지 않은 경우 옆에있는 체크 표시를 클릭하여 답변을 수락하십시오. – CKing