我有一个问题,就是我的Spring Boot应用程序在插入数据时性能非常慢。
我正在从一个数据库中提取大量的数据子集,并将这些数据插入到另一个数据库中。
以下是我的实体类:
@Entity
@Table(name = "element")
public class VXMLElementHistorical {
@Id
@Column(name = "elementid")
private long elementid;
@Column(name = "elementname")
private String elementname;
Getter/Setter methods...
我已经配置了一个JPA仓库
public interface ElementRepository extends JpaRepository<Element, Long> {
}
并调用save()方法保存我的对象。
@Transactional
public void processData(List<sElement> hostElements)
throws DataAccessException {
List<Element> elements = new ArrayList<Element>();
for (int i = 0; i < hostElements.size(); i++) {
Element element = new Element();
element.setElementid(hostElements.get(i).getElementid());
element.setElementname(hostElements.get(i).getElementname());
elements.add(element);
}
try{
elementRepository.save(elements);{
//catch etc...
}
每个项目执行插入操作需要6到12秒钟。我已经开启了Hibernate跟踪日志和统计信息,当我调用保存函数时,Hibernate会执行两个查询,一个选择和一个插入。选择查询占用了总时间的99%。我在数据库中直接运行了选择查询,结果以纳秒为单位返回。这使我相信它不是索引问题,但我不是DBA。
我在我的开发环境中创建了一个负载测试,并且使用类似的负载大小,整个过程的时间远远不及我的生产环境。有什么建议吗?
flush
和clear
。最好还要将刷新模式设置为手动(以防止脏检查和在之间刷新)。 - M. Deinum