我有一個線程聊天服務器應用程序,它需要MySQL授權。Java線程和MySQL
讓1個類創建MySQL連接,保持該連接處於打開狀態並讓每個線程都使用該連接但使用自己的Query處理程序的最佳方法是?
或者讓所有線程與MySQL進行獨立連接來驗證是否更好?
還是讓1個類處理查詢和連接更好?
我們正在尋找一個聊天服務器,該服務器應該能夠處理高達10.000個連接/用戶。
我現在用C3P0,和我創建了這一點:
public static void main(String[] args) throws PropertyVetoException
{
ComboPooledDataSource pool = new ComboPooledDataSource();
pool.setDriverClass("com.mysql.jdbc.Driver");
pool.setJdbcUrl("jdbc:mysql://localhost:3306/db");
pool.setUser("root");
pool.setPassword("pw");
pool.setMaxPoolSize(100);
pool.setMinPoolSize(10);
Database database = new Database(pool);
try
{
ResultSet rs = database.query("SELECT * FROM `users`");
while (rs.next()) {
System.out.println(rs.getString("userid"));
System.out.println(rs.getString("username"));
}
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
}
finally
{
database.close();
}
}
公共類數據庫{
ComboPooledDataSource pool;
Connection conn;
ResultSet rs = null;
Statement st = null;
public Database (ComboPooledDataSource p_pool)
{
pool = p_pool;
}
public ResultSet query (String _query)
{
try {
conn = pool.getConnection();
st = conn.createStatement();
rs = st.executeQuery(_query);
} catch (SQLException e) {
e.printStackTrace();
} finally {
}
return rs;
}
public void close()
{
try {
st.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
這會是線程安全?
謝謝,我一定會研究這個,看起來像正確的解決方案。 – YesMan85 2010-01-30 12:45:33
DBCP是單線程的。他明確要求在多線程環境下進行連接。我寧願去c3p0。 – BalusC 2010-01-30 14:25:25
我不確定我在DBCP中看到任何內容,表明您不能在多線程環境中使用它。你能詳細說明嗎? – 2010-01-30 14:49:56