有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从引导中获取值。来自静态实例的yml文件

  • 我有一个类宇宙连接供应商响应速度
  • 我从供应商响应Feed中调用了宇宙连接的方法
  • 我调用的SupplierGetResponseFeed方法是静态的
  • 例如:public static SupplierResponseDataEntity prepareSupplierAzureData(Map<String, Object> row, String[] columnNames) {
  • 因此,当我在SupplierGetResponseFeed中创建宇宙连接的对象时,我不能使用@Autowired作为无法从引导中选取值的原因。宇宙连接中的yml文件
  • 虽然我在SupplierGetResponseFeed中使用@Autowired创建对象,但我无法从引导中选择值

    @自动连线 静态宇宙连接宇宙

以下是供应商响应Feed的代码

public class SupplierGetResponseFeed {
static CosmosConnection cosmos= new CosmosConnection(); //creating object 
public static SupplierResponseDataEntity prepareSupplierAzureData(Map<String, Object> row, String[] columnNames) {
//Some code 
cosmos.connectToDB(); //calling the method of CosmosConnection class
} 

宇宙连接的代码是CosmosConnection

@Configuration
@ComponentScan
public class CosmosConnection {
    @Value("${cosmos.connectionuri}") private String uri;
    @Value("${cosmos.primarykey}") private String primarykey;

public String connectToDB() throws DocumentClientException, IOException, ParseException {
    System.out.println("URI is " + uri); //getting this as null

我需要做哪些更改来从引导中选取值。yml


共 (1) 个答案

  1. # 1 楼答案

    javax包中名为PostConstruct的注释。使用spring框架的注释可以解决这个问题。如源代码中所述:

    The PostConstruct annotation is used on a method that needs to be executed
     after dependency injection is done to perform any initialization
    

    下面的代码就是一个例子:

    @Configuration
    public class ComosConfig {
      @Value("${cosmos.connectionuri}") private String uri;
      @Value("${cosmos.primarykey}") private String primarykey;
    
      //get and set methods here
    }
    
    public class CosmosConnection {
      private String uri;
      private String primaryKey;
    
      public CosmosConnection(String uri, String primaryKey) {
        this.uri = uri;
        this.primaryKey = primaryKey;
      } 
    
      public String connectToDB() {
        //do something here
      }
    }
    
    @Component
    public class SupplierGetResponseFeed {
      private static CosmosConnection cosmos;
      private CosmosConfig config;
    
      public SupplierGetResponseFeed(CosmosConfig config) {
        this.config = config;
      }
    
      @PostConstruct
      public void init() {
        String uri = config.getUri();
        String primaryKey = config.getprimaryKey(); 
        cosmos = new cosmos(uri, primaryKey);
      }
    
      public static SupplierResponseDataEntity prepareSupplierAzureData() {
        cosmos.connectToDB(); //calling the method of CosmosConnection class
      }
    } 
    

    毕竟,考虑到代码分析UTIL,不建议从实例方法写入静态,因此您可能需要抑制与init方法一起使用的警告注释来消除警告