azure - Hibernate 性能很慢:Spring Batch & Azure SQL Server
问题描述
我有一个使用 Azure SQL 服务器作为后端的 Spring Batch 应用程序,我正在使用 Hibernate 来更新数据库。
我正在使用 FlatfileReader 从 CSV 文件中读取数据并使用 ItemWriter 写入 Azure SQL Server,如下所述
public class StoreWriter implements ItemWriter<List<Store>> {
Logger logger = Logger.getLogger(StoreWriter.class);
private HibernateItemWriter<Store> hibernateItemWriter;
public StoreWriter(HibernateItemWriter<Store> hibernateItemWriter) {
this.hibernateItemWriter = hibernateItemWriter;
}
@Override
public void write(List<? extends List<Store>> items) throws Exception {
for (List<Store> Store : items) {
hibernateItemWriter.write(Store);
}
logger.info(String.format("Store Processing Completed %s", new LocalDateTime()));
}
}
下面是我的休眠配置
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager" lazy-init="true">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="hibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="properties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2012Dialect</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.format_sql">false</prop>
<!-- <prop key="hibernate.hbm2ddl.auto">update</prop> -->
</props>
</property>
</bean>
<bean class="org.springframework.batch.core.scope.StepScope" />
<!-- DATA SOURCE -->
<bean id="demoDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="url" value="jdbc:sqlserver://demo.database.windows.net:1433;database=sqldb;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;" />
<property name="username" value="user1" />
<property name="password" value="p@ssword1" />
</bean>
我观察到它每分钟只处理 360 条记录,有没有办法提高性能?
这是休眠状态的统计数据:
1 条记录
3条记录
解决方案
推荐阅读
- javascript - 使用 jquery 或 javascript 运行浏览器工具栏按钮
- powershell - 如何阻止电子邮件签名通过
- ios - 为什么频繁切换CALayer的隐藏属性会导致图形极度退化?
- database - 单个实体的所有者和实体组的所有者。约束还是关系?
- typescript - 你能指定一个属性必须在接口中保存某个值吗?
- php - 我正在使用 C 语言的 libcurl 库编写一个 REST API 来登录我的网页
- r - shinyApp(ui,服务器)中的错误:shinyApp 中缺少“服务器”
- c# - 在 WinForms 中使用 EasyTabs 的带有 Chrome 样式标签的应用程序
- dart - 如何使用动态日期使用 Dart 的差异方法和 DateTime?
- ios - 如何在 iOS 中测试您的延迟深层链接