Java Quarkus + MongoDB: невозможно подключиться к базе данныхJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java Quarkus + MongoDB: невозможно подключиться к базе данных

Сообщение Anonymous »

У меня есть небольшое контейнерное приложение, использующее Java Quarkus, подключенное к базе данных MongoDB. По какой-то причине я долгое время боролся с этой простой ошибкой.

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

2025-01-12 23:50:26,954 INFO  [org.mon.dri.cluster] (executor-thread-1)
No server chosen by ReadPreferenceServerSelector{readPreference=primary} from cluster description ClusterDescription{type=UNKNOWN, connectionMode=SINGLE, serverDescriptions=[ServerDescription{address=localhost:27017, type=UNKNOWN, state=CONNECTING,
exception={com.mongodb.MongoSocketOpenException:
Exception opening socket},
caused by {java.net.ConnectException: Connection refused}}]}.  Waiting for 30000 ms before timing out

Мне это кажется признаком того, что приложение не может подключиться к экземпляру mongodb и прочитать его, что я не мог решить до сих пор.
p>
Это классы сущностей, которые представляют объекты, которые я пытаюсь читать/записывать.

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

package com.mongodb;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.bson.types.ObjectId;

import java.util.Objects;

public class PersonEntity {

@JsonSerialize(using = ToStringSerializer.class)
public ObjectId id;
public String name;
public Integer age;

public PersonEntity() {
}

public PersonEntity(ObjectId id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}

@Override
public int hashCode() {
int result = id != null ? id.hashCode() : 0;
result = 31 * result + (name != null ? name.hashCode() : 0);
result = 31 * result + (age != null ? age.hashCode() : 0);
return result;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

PersonEntity that = (PersonEntity) o;

if (!Objects.equals(id, that.id)) return false;
if (!Objects.equals(name, that.name)) return false;
return Objects.equals(age, that.age);
}

public ObjectId getId() {
return id;
}

public void setId(ObjectId id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}
}

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

package com.mongodb;

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import jakarta.enterprise.context.ApplicationScoped;
import org.bson.conversions.Bson;
import org.bson.types.ObjectId;

import java.util.ArrayList;
import java.util.List;

import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Updates.inc;

@ApplicationScoped
public class PersonRepository {

private final MongoClient mongoClient;
private final MongoCollection
 coll;

public PersonRepository(MongoClient mongoClient) {
this.mongoClient = mongoClient;
this.coll = mongoClient.getDatabase("test").getCollection("persons", PersonEntity.class);
}

public String add(PersonEntity person) {
return coll.insertOne(person).getInsertedId().asObjectId().getValue().toHexString();
}

public List getPersons() {
return coll.find().into(new ArrayList());
}

public long anniversaryPerson(String id) {
Bson filter = eq("_id", new ObjectId(id));
Bson update = inc("age", 1);
return coll.updateOne(filter, update).getModifiedCount();
}

public long deletePerson(String id) {
Bson filter = eq("_id", new ObjectId(id));
return coll.deleteOne(filter).getDeletedCount();
}
}

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

package com.mongodb;

import jakarta.inject.Inject;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;

import java.util.List;

@Path("/api")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class PersonResource {

@Inject
PersonRepository personRepository;

@GET
@Path("/hello")
public String hello() {
return "Hello from Quarkus REST";
}

@POST
@Path("/person")
public String createPerson(PersonEntity person) {
return personRepository.add(person);
}

@GET
@Path("/persons")
public List  getPersons() {
return personRepository.getPersons();
}

@PUT
@Path("/person/{id}")
public long anniversaryPerson(@PathParam("id") String id) {
return personRepository.anniversaryPerson(id);
}

@DELETE
@Path("/person/{id}")
public long deletePerson(@PathParam("id") String id) {
return personRepository.deletePerson(id);
}
}

Строка подключения в моем application.properties выглядит следующим образом:

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

quarkus.mongodb.connection-string=mongodb://localhost:27017
Я использую MongoDB v8.0.4 в Ubuntu 22.04.
Проект создан с помощью Maven (v3.9.9)
Что я' Я уже пробовал:
  • Переустановка и перезапуск mongoDB
  • Запуск MongoDB в качестве контейнера и локального экземпляра
    Поиграйтесь со строкой подключения в application.properties.
  • Установите для параметраbindIp значение 0.0.0.0 в файле конфигурации MongoDB (предлагаемое решение в аналогичной теме: ни один сервер не выбран WritableServerSelector из кластер)
  • Запуск сценариев с помощью Python для проверки возможности вставки и чтения объектов из БД
Любой Буду очень признателен за помощь, так как эта проблема беспокоит меня уже целый день.
С уважением

Подробнее здесь: https://stackoverflow.com/questions/793 ... e-database
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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