В любом случае я могу изменить имя документа во время исполнения - PullRequest
0 голосов
/ 22 марта 2019

В проекте нам нужно каждый день менять суффикс имени коллекции на основе даты.

Таким образом, один день коллекции называется:

samples_22032019

, а на следующий день это

samples_23032019

Из-за этого мне каждый день нужно менять суффикс и перекомпилировать приложение для весенней загрузки.Можно ли как-то изменить это, чтобы коллекция / таблица могла рассчитываться динамически на основе текущей даты?Какой-нибудь совет для MongoRepository?

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Учитывая ниже, ваш боб.Вы можете использовать аннотацию @Document с языком выражений Spring для разрешения суффикса во время выполнения.Как показано ниже,

@Document(collection = "samples_#{T(com.yourpackage.Utility).getDateSuffix()}")
public class Samples {
   private String id;
   private String name;
}

Теперь у вас есть функция изменения даты в методе Utility, который Spring может разрешить во время выполнения.SpEL удобен в таких сценариях.

package com.yourpackage;

public class Utility {
  public static final String getDateSuffix() {
     //Add your real logic here, below is for representational purpose only.
     return DateTime.now().toDate().toString();;
  }
}

HTH!

0 голосов
/ 22 марта 2019

Создайте ежедневное задание cron, генерируйтеNewName для вашей коллекции и выполните приведенный ниже код.Здесь я получаю коллекцию с помощью MongoDatabse, а с помощью MongoNamespace мы можем переименовать коллекцию.Чтобы получить старое / новое имя коллекции, вы можете написать отдельный метод.

@Component
public class RenameCollectionTask {

  @Scheduled(cron = "${cron}")
  public void renameCollection() {

    // creating mongo client object
    final MongoClient client = new MongoClient(HOST_NAME, PORT);
    // selecting the mongo database
    final MongoDatabase database = client.getDatabase("databaseName");
    // selecting the mongo collection
    final MongoCollection<Document> collection = database.getCollection("oldCollectionName");
    // creating namespace
    final MongoNamespace newName = new MongoNamespace("databaseName", "newCollectionName");
    // renaming the collection
    collection.renameCollection(newName);
    System.out.println("Collection has been renamed");
    // closing the client
    client.close();
  }
}

Чтобы назначить имя коллекции, вы можете сослаться на this , чтобы при каждом перезапуске не требовалось.

Метод renameCollection() имеет следующие ограничения:
1) Он не может перемещать коллекцию между базами данных.
2) Это не поддерживается sharded collections.
3) Вы не можете переименовать views.
Подробнее см. в этом .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...