线程池和连接池,需要帮助以了解它们如何运行Java

问题描述 投票:-1回答:1

所以基本上我是在一家大公司实习的。我必须做一个小的Java程序(javaFX),它带有一个csv列表并更新我们的数据库(3服务器6数据库)。该文件有700.000个条目,我们的服务器可以支持50个连接。所以我对连接池的限制是50个,我应该使用不超过200个线程。那就是我从首席程序员那里得到的信息。

我开始了我的项目,创建了我的对象,并从csv文件中列出了一个可观察的列表(可以说,其中仅包含ID和价格,无论如何其他字段都不相关)。我在堆栈中的是线程池和连接池。我如何同时使用两者?在我的新手脑海中,我想我将创建一个循环,该循环使200个线程执行该语句,但是随后我必须使用50个连接,因此我应该使50个线程从池中打开50个连接并执行更新?如果有人为我提供一个示例来理解与mysql连接的线程如何工作,我将非常高兴,因为我的头会爆炸。

java multithreading javafx threadpool connection-pooling
1个回答
1
投票

我不理解需要多线程来读取CSV文件(IO)并将数据加载到数据库。没有它,您就可以实现。在Spring中(假定JavaFX支持Spring),您可以以字节流的形式读取Chunk中的数据,并将数据批量加载到数据库中(例如,每5000行)。以下是示例片段。

import org.springframework.data.repository.CrudRepository;

//import org.springframework.data.jpa.repository.JpaRepository;
//import org.springframework.data.repository.CrudRepository;

import com.billing.portal.notification.entities.Notification;

public interface NotifyRepo extends CrudRepository<Notification, Integer> {

}

下面的实现代码

@Autowired
NotifyRepo notify;

int total=notifyRecords.size();
System.out.println("Total records are  "+total);
int limit=5000;
int start=0;
int rem=0;
boolean check=true;
if(total>5000) {
    rem = total-limit;
    while(check) {
            System.out.println("Start ::: "+start
                    +" limit ::: "+limit
                    +" rem ::: "+rem
                     );
            notifyRecords1 = notifyRecords.subList(start,limit);
            System.out.println("********************* Batch Insert Started from "+start+" to "+limit +"************************");
            notify.saveAll(notifyRecords1);
            System.out.println("Batch Insert Completed");
            if(limit==total) {
                break;
            }
            start=limit;
            rem=rem-5000;
            limit+=5000;    
            if(rem<=0) {
                limit=total;
            }

        }

    Batchload load = new Batchload();
    loadRepo.save(load);                    

    }else {

        System.out.println("Batch insert started, total less than "+limit);
        notify.saveAll(notifyRecords);
}
© www.soinside.com 2019 - 2024. All rights reserved.