У меня есть сокетное соединение, которое отправит данные в очередь через databaseQueue.add(message);
. Затем класс DatabaseProcessor
, который запускается как поток во время запуска, где будет установлено одно соединение с базой данных. Соединение будет продолжать принимать сообщение через databaseQueue.take();
и обрабатывать. Хорошей частью этой части является то, что установлено только одно соединение с базой данных. Проблема возникает, когда внезапно возникает всплеск данных. Таким образом, другой метод заключается в том, что для каждой полученной информации я буду открывать и закрывать метод. Итак, основываясь на своем опыте для тяжелых нагрузок, какой лучший путь сюда?
Небольшой фрагмент моих кодов.
class ConnectionHandler implements Runnable {
ConnectionHandler(Socket receivedSocketConn1) {
this.receivedSocketConn1=receivedSocketConn1;
}
// gets data from an inbound connection and queues it for databse update
public void run() {
databaseQueue.add(message); // put to db queue
}
}
class DatabaseProcessor implements Runnable {
public void run()
{
// open database connection
createConnection();
while (true)
{
message = databaseQueue.take(); // keep taking message from the queue add by connectionhandler and here I will have a number of queries to run in terms of select,insert and updates.
}
}
void createConnection()
{
System.out.println("Crerate Connection");
connCreated = new Date();
try
{
dbconn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test1?"+"user=user1&password=*******");
dbconn.setAutoCommit(false);
}
catch(Throwable ex)
{
ex.printStackTrace(System.out);
}
}
}
public void main()
{
new Thread(new DatabaseProcessor()).start(); //calls the DatabaseProcessor
//initiate the socket
}