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;
}
}
Код: Выделить всё
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);
}
}
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();
}
}
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());
}
}
Однако значение является правильным только в том случае, если оно жестко запрограммировано при доступе к компоненту во время вызова контроллера. ; в противном случае значение свойства равно нулю, и создание фабрики завершается неудачей.
Я даже пытался прикрепить значения свойств к полям-членам в MongoGeneral.java в конструкторе, но это по-прежнему показывает ноль при доступе через контроллер. Может ли кто-нибудь увидеть и помочь, что я делаю неправильно?
Подробнее здесь: https://stackoverflow.com/questions/787 ... n-accessed