@Configuration类中的线程安全性和资源泄漏

时间:2019-03-22 11:24:11

标签: java spring spring-boot spring-config

我必须在@Configuration类中手动创建一个单例bean,以便共享它而不将其暴露在上下文中(这会触发条件/自动配置)。有人指出我要自己管理某些风险:

  • 线程安全性:数据源对象不是无状态的
  • 资源泄漏:上下文未明确关闭Datasource对象

代码如下:

    private DataSource nonExposedDatasource;

    public DataSource nonExposedSingletonDataSource() {
        if (Objects.isNull(this.nonExposedDatasource)) {
            this.nonExposedDatasource = this.myPrivateDatasourceProperties.initializeDataSourceBuilder().build();
        }
        return this.nonExposedDatasource;
    }

    @Bean
    public TaskConfigurer taskConfigurer() {
        return new DefaultTaskConfigurer(this.nonExposedSingletonDataSource());
    }

    @Bean
    public BatchConfigurer batchConfigurer() {
        return new DefaultBatchConfigurer(this.nonExposedSingletonDataSource());
    }

我的问题是:我真的有忽略这一点的风险吗? Spring不够聪明吗?

  • 关于线程安全性,我理解我的代码是 有问题的,应该发生2个线程处理 @组态。 Spring会那样吗?

  • 关于资源泄漏,如果像大多数应用程序一样,如果我的数据源是由Spring管理的@Bean,那么无论如何关闭应用程序,这不是潜在的陷阱吗?

您如何使该代码更安全?

0 个答案:

没有答案