我必须在@Configuration
类中手动创建一个单例bean,以便共享它而不将其暴露在上下文中(这会触发条件/自动配置)。有人指出我要自己管理某些风险:
代码如下:
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,那么无论如何关闭应用程序,这不是潜在的陷阱吗?
您如何使该代码更安全?