我正在使用spring batch写入数据库。我已经将JdbcBatchItemWriter
创建为bean,但在其中也创建了BeanPropertyItemSqlParameterSourceProvider()
的新对象。
我想知道是否每次都会为BeanPropertyItemSqlParameterSourceProvider()
创建一个新对象吗?
虽然我的bean正在返回类型为JdbcBatchItemWriter
的对象,但由于我已经在bean中声明了它,所以它将成为一个对象吗?>
方法1
@Bean public JdbcBatchItemWriter<CdsData> cdsWriter(@Qualifier("MySql") final DataSource dataSource) { JdbcBatchItemWriter jdbcCdsWriter = new JdbcBatchItemWriter(); jdbcCdsWriter.setDataSource(dataSource); jdbcCdsWriter.setSql(mySqlCdsdataSql); jdbcCdsWriter.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider()); return jdbcCdsWriter; }
只是为了比较性能,我为
BeanPropertyItemSqlParameterSourceProvider()
创建了一个单独的bean,以确保我每次都不创建一个新对象。令我惊讶的是,下面的代码插入数据库花费了更多时间。谁能解释为什么方法2降低了性能?
采用方法1很好,因为我相信它每次都为BeanPropertyItemSqlParameterSourceProvider
创建对象。
方法2
@Bean
public BeanPropertyItemSqlParameterSourceProvider sqlparmeter()
{
BeanPropertyItemSqlParameterSourceProvider beanPropertyItemSqlParameterSourceProvider =
new BeanPropertyItemSqlParameterSourceProvider();
return beanPropertyItemSqlParameterSourceProvider;
}
@Bean
public JdbcBatchItemWriter<CdsData> cdsWriter(@Qualifier("MySql") final DataSource dataSource)
,BeanPropertyItemSqlParameterSourceProvider beanPropertyItemSqlParameterSourceProvider)
{
JdbcBatchItemWriter jdbcCdsWriter = new JdbcBatchItemWriter();
jdbcCdsWriter.setDataSource(dataSource);
jdbcCdsWriter.setSql(mySqlCdsdataSql);
jdbcCdsWriter.setItemSqlParameterSourceProvider(beanPropertyItemSqlParameterSourceProvider);
return jdbcCdsWriter;
}
我正在使用spring batch写入数据库。我已经将JdbcBatchItemWriter创建为bean,但是在其中我还创建了BeanPropertyItemSqlParameterSourceSourceProvider()的新对象。我...
请勿执行此优化。 ItemWriter仅实例化一次(作业开始时)。