Безопасность потоков и утечка ресурсов в классе @Configuration - PullRequest
2 голосов
/ 22 марта 2019

Мне пришлось создать одноэлементный бин вручную в классе @Configuration, чтобы поделиться им, не подвергая его воздействию контекста (который вызывает условные / автоконфигурации).Мне указали на осознание определенных рисков, чтобы управлять им самостоятельно:

  • Потокобезопасность потока: Объект источника данных не является состоянием без состояния
  • Утечка ресурса: объект источника данных не был явно закрытпо контексту

Код следующий:

    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());
    }

Мой вопрос: действительно ли у меня есть риск пропустить это?Разве весна не достаточно умна?

  • Что касается безопасности потоков, я понимаю, что из-за проблем с моим кодом должно произойти 2 потока, обрабатывающих @Configuration.Весна делает это ??

  • Что касается утечки ресурса, если бы моим источником данных был @Bean, управляемый Spring, как и большинство приложений, не было бы это потенциальной ловушкой, если бы приложение все равно закрылось?

Как бы вы сделали этот код безопаснее?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...