ConfigurationProperties считывается при запуске, но показывает ноль при доступе к BeanJAVA

Программисты JAVA общаются здесь
Anonymous
ConfigurationProperties считывается при запуске, но показывает ноль при доступе к Bean

Сообщение Anonymous »

Сохранение всех моих свойств Mongo во внешних файлах application.properties и чтение их с помощью предоставленных классов. Я использую их в компоненте для создания объектов DatabaseFactory, но при доступе к компоненту они читают значение null - даже после правильного чтения при запуске.
MongoProperties.java

Код: Выделить всё

package com.mistermorse.flawlessbeansjavaspringapi.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "spring.data.mongodb")
public class MongoProperties {

private String uri;
private String database;

public String getUri() {
return uri;
}

public void setUri(String uri) {
this.uri = uri;
}

public String getDatabase() {
return database;
}

public void setDatabase(String database) {
this.database = database;
}

}
MongoApplication.java

Код: Выделить всё

package com.mistermorse.flawlessbeansjavaspringapi;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;

@SpringBootApplication
@ConfigurationPropertiesScan("com.mistermorse.flawlessbeansjavaspringapi")
public class FlawlessBeansJavaSpringApiApplication {

public static void main(String[] args) {
SpringApplication.run(FlawlessBeansJavaSpringApiApplication.class, args);
}

}
Итак, я сейчас работаю над пользовательскими функциями, но я создал временную конечную точку для проверки логики свойств, и у меня возникли проблемы с использованием компонента для создания фабрики.< /p>
UserController.java

Код: Выделить всё

package com.mistermorse.flawlessbeansjavaspringapi.controller;

import com.mistermorse.flawlessbeansjavaspringapi.config.MongoGeneral;
import com.mistermorse.flawlessbeansjavaspringapi.config.MongoProperties;
import com.mongodb.client.MongoIterable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@EnableConfigurationProperties(MongoProperties.class)
@RestController
@RequestMapping("/user")
public class UserController {

private ApplicationContext applicationContext;
private MongoProperties mongoProperties;

@Autowired
public UserController(MongoProperties mongoProperties) {
this.applicationContext = new AnnotationConfigApplicationContext();
this.mongoProperties = mongoProperties;
}

@GetMapping("/collections")
public MongoIterable getCollections() {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MongoGeneral.class);
SimpleMongoClientDatabaseFactory simpleMongoClientDatabaseFactory = applicationContext.getBean("mongoDbFactory",SimpleMongoClientDatabaseFactory.class);
return simpleMongoClientDatabaseFactory.getMongoDatabase("db").listCollectionNames();
}

}
Теперь вот в чем проблема; У меня есть файл конфигурации с методом bean-компонента для возврата SimpleMongoClientDatabaseFactory с использованием MongoClients.create() и URI; сначала я протестировал его с прямым адресом, содержащим u/p. Это сработало. Теперь я пытаюсь использовать ConfigurationProperties.
MongoGeneral.java

Код: Выделить всё

package com.mistermorse.flawlessbeansjavaspringapi.config;

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.lang.NonNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;

@Configuration
@EnableConfigurationProperties(MongoProperties.class)
public class MongoGeneral extends AbstractMongoClientConfiguration {

private MongoProperties mongoProperties;

@Autowired
public MongoGeneral(MongoProperties mongoProperties) {
this.mongoProperties = mongoProperties;
}

@Override
@NonNull
public String getDatabaseName() {
System.out.println("Name: " + this.mongoProperties.getDatabase());
return this.mongoProperties.getDatabase();
}

@Override
@NonNull
public MongoClient mongoClient() {
return MongoClients.create("mongodb+srv://matthewharp:Qo17iI39lRAnILlh@cluster0.2ahn6zq.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0");
}

@Bean
@NonNull
@Override
public SimpleMongoClientDatabaseFactory mongoDbFactory() {
return new SimpleMongoClientDatabaseFactory(mongoClient(), getDatabaseName());
}

}
Вот проблема: когда приложение запускается, вход в getDatabase() выдает правильное значение свойства, независимо от того, есть ли у меня жестко запрограммированное значение или свойство, И фабрика создается, если жестко запрограммированное значение используется при вызове метода компонента.
Однако значение является правильным только в том случае, если оно жестко запрограммировано при доступе к компоненту во время вызова контроллера. ; в противном случае значение свойства равно нулю, и создание фабрики завершается неудачей.
Я даже пытался прикрепить значения свойств к полям-членам в MongoGeneral.java в конструкторе, но это по-прежнему показывает ноль при доступе через контроллер. Может ли кто-нибудь увидеть и помочь, что я делаю неправильно?

Подробнее здесь: https://stackoverflow.com/questions/787 ... n-accessed

Вернуться в «JAVA»