与每次创建该类的新对象相比,创建bean都会降低性能吗?

问题描述 投票:0回答:1

我正在使用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()的新对象。我...

performance object spring-batch spring-jdbc spring-bean
1个回答
0
投票

请勿执行此优化。 ItemWriter仅实例化一次(作业开始时)。

© www.soinside.com 2019 - 2024. All rights reserved.