我创建了javafx apllication,它连接到数据库并从数据创建LineChart,并且我工作得很好,除了在循环中获取数据时连接到数据库并使应用程序在使用h2嵌入式数据库时变慢时。我正在使用spring jdbcDaoSupport进行查询。春天如何管理与数据库的大量连接?
在循环中进行连接是不好的设计,但我不知道我会如何使它工作不同。我应该如何管理这样的连接?
我试过寻找答案,但我没有发现任何与我的问题有关的东西。
下面是相关的代码部分:
public void cijenaVodePoGradovimaGraf(){
ObservableList<Grad> gradList;
ObservableList<String> gradNaziv;
gradNaziv=FXCollections.observableArrayList();
gradList=databaseService.getVodoopskrbaGradList();
for (Grad grad : gradList) {
gradNaziv.add(grad.getNaziv());
}
CategoryAxis xOs=new CategoryAxis(gradNaziv);
xOs.setTickLabelRotation(270);
xOs.setTickLabelFont(Font.font(14));
NumberAxis yOs=new NumberAxis();
yOs.setLabel("Cijena [kn/kubik]");
yOs.setTickLabelFont(Font.font(14));
XYChart.Series<String, Number> series=new XYChart.Series<>();
series.setName("Varijabilni dio");
XYChart.Series<String, Number> series2=new XYChart.Series<>();
series2.setName("Fiksni dio");
//this is where problem is
for(int i=0;i<gradNaziv.size();i++){
ObservableList<Vodoopskrba> v=databaseService.getVodoopskrbaList(gradNaziv.get(i));
series.getData().add(new XYChart.Data<>(gradNaziv.get(i),v.get(0).getVodoOdvVar()));
series2.getData().add(new XYChart.Data<>(gradNaziv.get(i),v.get(0).getVodoOdvFix()));
}
ObservableList<XYChart.Series<String, Number>> data=FXCollections.observableArrayList();
data.add(series);
data.add(series2);
lcGraf=new LineChart<>(xOs,yOs,data);
lcGraf.setTitle("Cijena vode");
for(XYChart.Series<String, Number> s : lcGraf.getData()) {
for (XYChart.Data<String, Number> d : s.getData()) {
Tooltip tt=new Tooltip(d.getYValue().toString());
Tooltip.install(d.getNode(), tt);
d.getNode().setOnMouseEntered((event)->{
d.getNode().getStyleClass().add("onHover");
});
d.getNode().setOnMouseExited((event)->{
d.getNode().getStyleClass().remove("onHover");
});
}
}
AnchorPane root=((AnchorPane)this.getStage().getScene().getRoot());
((GridPane)root.getChildren().get(0)).add(lcGraf, 0, 1, 2, 1);
}
标志着我的代码部分我在哪里循环流经城市的列表,然后我想提出的数据库连接,从那个小镇获得供水公司,然后我添加有关该城市水价的数据图表。
如果您一直在创建新的连接,您将需要使用连接池。 – Kayaman
@Kayaman我是新来的春天可以提供示例如何在春天使用h2数据库设置连接池 – redMist
好吧,连接池可能有点矫枉过正,尤其是对于H2,但创建数据库连接是昂贵的,因此尝试重用他们。不要在循环中打开一个新循环,而要在循环外部打开一个新循环。 – Kayaman