Да, я знаю .. Я бы не сделал это с одним соединением, если бы не был обязан.JDBC Singleton final Переменная соединения с синтаксическим разбором файла
С учетом сказанного предположим, что я хочу сделать одноэлементный класс, скажем DBConnection, с помощью переменной sql Connection, и, допустим, я хочу, чтобы класс загружал информацию из файла о базе данных ip, пользователе и т. Д. Внутри своего конструктора ,
Как я могу установить переменную Connection как final static, если мне нужно сначала проанализировать данные из файла перед назначением на него значения?
кода до сих пор (игнорировать недостающую синхронизацию на GetConnection):
final public class DBConnection {
transient private static Connection con;
private DBConnection()
[parse file, make url]
con = DriverManager.getConnection(url);
[...]
}
public static Connection getConnection(){
if (con == null)
new DBConnection();
return con;
}
}
Пожалуйста, расскажите, если есть что-то неловко, на классе, синглтон-накрест. В некотором смысле, может быть, я не должен иметь его окончательным, если соединение закрывается, и я должен выполнить новый getConnection, но это, вероятно, будет плохой класс singleton, не так ли?
EDIT решил изменить свой ПОДХОД и сделать его перечислимого путь
public enum Connect {
INSTANCE;
private Connection con;
Connect(){
[parse file]
con = DriverManager.getConnection(url);
[...]
}
public Connection getCon(){
return con;
}
Однако, как я могу убедиться, никто не пытается
Channel.INSTANCE.getCon
до того, как конструктор закончен?
Ι'м немного беспокоит доступ к getCon, например, к второму потоку, в то время как первый поток инициирует конструктор и, похоже, назначается экземпляр. (см. тест Symantec JIT по адресу http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html: «присвоение синглонам [i] .режим выполняется до того, как конструктор для Singleton называется" , хотя я не уверен, что этот случай может быть применен к перечислению. – Bimp
перечисления являются потокобезопасными. Не беспокойтесь. –
Я вижу, спасибо. – Bimp