gpt4 book ai didi

java - 如何在多线程环境下使用JdbcTemplate?

转载 作者:行者123 更新时间:2023-12-03 18:37:07 28 4
gpt4 key购买 nike

我正在尝试将 Spring JdbcTemplate 与 Spring 的 SimpleAsyncTaskExecutor 结合使用,以便与数据库的并发连接与单线程环境相比,整个数据可以在更短的时间内插入到相关表中。

我正在使用以下代码,但它并没有加快我的应用程序的速度。

我能找到的唯一线索是 bean“campaignProductDBWriter”仅构造一次,而我期望创建 10 个单独的实例因为我在 tasklet 中将“throttle-limit”设置为 10。

我做错了什么?任何帮助或建议将不胜感激。

问候,

<bean id="dataSourceProduct"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url.product}"
p:username="${jdbc.username.product}" p:password="${jdbc.password.product}"
/>

<bean id="jdbcTemplateProduct" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSourceProduct" />
</bean>

<bean id="simpleTaskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor" >
<property name="concurrencyLimit" value="-1" />
</bean>

<batch:job id="sampleJob" restartable="true" incrementer="dynamicJobParameters">
<batch:step id="mapMZList">
<batch:tasklet allow-start-if-complete="true" task-executor="simpleTaskExecutor" throttle-limit="10">
<batch:chunk reader="campaignProductItemReader" processor="campaignProductProcessor" writer="campaignProductDBWriter" commit-interval="5000"/>
</batch:tasklet>
</batch:step>
</batch:job>

<bean id="campaignProductDBWriter" class="com.falcon.cc.job.step.CampaignProductWriter">
<property name="jdbcTemplate" ref="jdbcTemplateProduct" />
</bean>


<bean id="campaignProductItemReader" class="com.falcon.cc.job.step.FlatFileSynchronizedItemReader" scope="step">
<property name="resource" value="file:#{jobParameters['input.TEST_FILE.path']}"/>

<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<property name="lineTokenizer">
<bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
<property name="delimiter" value=";"/>
<property name="names" value="approvalStatus,validFrom,validTo"/>
</bean>
</property>
<property name="fieldSetMapper">
<bean class="com.falcon.cc.mapper.CampaignProductFieldSetMapper" />
</property>
</bean>
</property>
</bean>

最佳答案

这不是您的 Spring 配置问题,也不是您使用 jdbcTemplate 的方式问题,它只是围绕 JDBC API 的一个薄的无状态包装器。

最明显的可能性是你的瓶颈是你的数据库,而不是你的代码。完全有可能对数据库运行多个并发操作并不比一次执行一个操作快。

这可能有多种原因,例如数据库锁定,或者只是缺乏原始 I/O 性能。

在考虑使用多线程来提高性能时,您必须确定瓶颈在哪里。如果您的代码不是瓶颈,那么使其成为多线程不会使事情变得更快。

关于java - 如何在多线程环境下使用JdbcTemplate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5221100/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com