在Java类中创建了一个带有@Configuration注释的bean,当尝试调用getBean时,它正在退出应用程序

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

无法弄清楚为什么它退出 Spring Boot 应用程序。它既不显示任何错误(日志)也不显示任何异常。但在某些调试点上,当 bean 被调用时,我得到了 NullBean。

这里的bean是数据源。 仅当数据源保存到映射对象中时调用 bean 时,应用程序才能工作,而不是使用 beans.getBean 方法调用。 任何建议,为什么 spring 容器没有指出任何问题或者为什么 Spring 容器没有提供 bean。

例如:

配置类

@Configuration
public class DataSourceConfig{

   private static final Map<String, BasicDataSource> map = new HashMapo<>();

   @Bean(name="pg")
   public void getDataSource(){
      BasicDataSource datasource = new BasicDataSource();
      datasource.setUrl();
      datasource.setUser();
      datasource.setDriverClassName();
      datasource.setCloudSqlInstance();
      datasource.setSSLMode("disable");
      //set the values from properties file
      map.put("pg", dataSource);
   }

   public Map<String,BasicDataSource> getdataSources(){
      return map;
   }
}

----------------------------------------

@Component
@DataSourceElement(DataSource.PG)
class Example{
   //
}

---------------------------------------

In enum class we defined.

enum DataSourceElement {
  PG("pg");
  private name;

  public DataSourceElement(String name){
     this.name = name;
  }
}

---------------------------------------

@Component
class App{

@Autowired
private BeanFactory beans;

private void doGetBean(){
  ...
   beans.getBean(this.dataSourceElement.PG, DataSource.class);  
  //It will return bean, but it's not working
 }

}

调用示例类,然后它将使用 App 类来获取 bean 但是当尝试获取 bean 时,它不起作用

所以我很喜欢 DataSourceConfig.getdataSources().get("pg") - 它有效

java spring spring-boot
1个回答
0
投票

回答你的问题。很明显。

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