Я использую проект Spring-Boot и MongoRepository вместо MongoTemplate.Как динамически установить имя хоста с помощью MongoRepository
При использовании MongoTemplate, можно динамически установить имя хоста с помощью MongoConnectionPool так:
@Autowired
MongoConnectionPool mongoConn
....
mongoConn.setHostname("127.23.45.89");
mongoConn.setPort(27017);
Как достичь того же эффекта с помощью MongoRepository?
Я знаю, что я могу указано имя хоста и номер порта, указав
spring.data.mongodb.host=hostname1
spring.data.mongodb.port=27017
в application.properties файле.
Однако я использую GenericContainer, чтобы развернуть экземпляр mongo через контейнер Docker для запуска моего модульного теста. Контейнер динамически назначил IP-адрес и порт экземпляру mongo, и поэтому мне нужно иметь возможность динамически устанавливать имя хоста и порт для MongoRepository во время выполнения.
Вот как я настраиваю свой модульный тест.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MongoConfiguration.class)
public class HierarchiesServiceImplTests {
private static final Logger log = LoggerFactory.getLogger(HierarchiesServiceImplTests.class);
@Autowired
private HierarchiesService hierarchiesService;
@Autowired
private HierarchyRepository hierarchyRepo;
@BeforeClass
public void setUp() {
MockitoAnnotations.initMocks(this);
startMongo();
}
/**
* Starts a Mongo docker container, and configures the repository factory to use this instance.
*/
private void startMongo() {
GenericContainer mongo = new GenericContainer("mongo:3")
.withExposedPorts(27017);
mongo.start();
String containerIpAddress = mongo.getContainerIpAddress();
int mappedPort = mongo.getMappedPort(27017);
//TODO: set the hostname and port here so that the MongoRepository use this mongo instance instead of the default localhost.
log.info("Container mongo:3 listening on {}:{}", containerIpAddress, mappedPort);
}
Это то, что у меня в MongoConfiguration.class
@Configuration
@EnableMongoRepositories
@ComponentScan({"com.is.hierarchies.service"})
public class MongoConfiguration {
}
@Alex, спасибо за предложение. Тег «весна» заменен на «весеннюю загрузку» – Antwan
Я добавил еще один ответ, который, я считаю, в большей степени соответствует тому, что вы искали – alexbt