Показаны сообщения с ярлыком Spring data. Показать все сообщения
Показаны сообщения с ярлыком Spring data. Показать все сообщения

понедельник, 3 февраля 2020 г.

Switch off telemetry for Azure Cosmos DB

It is not obvious, but to switch off telemetry for Spring Data application, one should either:
  • set cosmosdb.telemetryAllowed=false in application.properties
  • set telemetryAllowed: false in application.yml
Default value is false, however sometimes it is not enough just to avoid set this property.
Surprise fro me was the need to specify it in application.yml only, even if another profile is used.

Reference:
https://github.com/microsoft/spring-data-cosmosdb/blob/master/src/main/java/com/microsoft/azure/spring/data/cosmosdb/common/PropertyLoader.java

private static final String APPLICATION_PROPERTY_FILE = "/application.properties";

private static final String APPLICATION_YML_FILE = "/application.yml";

public static boolean isApplicationTelemetryAllowed() {
    String allowed = getPropertyByName("cosmosdb.telemetryAllowed", APPLICATION_PROPERTY_FILE);

    if (allowed == null) {
        allowed = getPropertyByName("telemetryAllowed", APPLICATION_YML_FILE);
    }

    //  Default, no telemetry
    if (allowed == null) {
        return false;
    } else {
    return !allowed.equalsIgnoreCase("false");
    }
}

воскресенье, 21 апреля 2013 г.

очень упрощенный конспект книги о Spring Data

Долго сомневался, но все же решил опубликовать краткий конспект того, что вычитал в книге Чтение он не заменит, опыта не добавит, но общее представление о том, что в книге способен дать.
Итак, тезисно:
  1. Причины появления NoSQL: увеличение количества данных, соотношение структуры домена со структурой базы данных (графы как графы, key-value как key-value)
  2. Виды NoSQL баз: key-value (похоже на hashtable), column family (как key-value но value это column), document (структурированные данные, например XML или JSON) и graph (графы, модель данных содержит узлы-nodes и ребра-edges)
  3. Atomicity Consistency Isolation Durability (ACID) в RDBMS заменяется Basically Available Scalable Eventually consistent (BASE) для NoSQL
  4. JPA не подходит как основа общего интерфейса для NoSQL - его спецификация завязана на Object Relational Mapping.
  5. Каждое из хранилищ Spring Data содержит не только одинаковую структурную модель, но и отличия в свойствах и возможностях
  6. Spring Data работает на основе декларативного маркерного обозначения имен элементов архитектуры (классов, интерфейсов, полей данных, методов). Выбор конкретного хранилища определяется в конфигурации приложения (например, @EnableJpaRepositories или jpa:repositories base-package="..." если используется XML-конфиг).
  7. Методы интерфейса для работы с определенным доменным класом (например, Client) определяются или полностью пользователем (через запрос @Query для выполнения), или путем расширения интерфейсов Spring Data.
    Repository - простой маркерный интерфейс для пометки для Spring Data определяемого пользователем репозитория.
    CrudRepository расширяет Repository основными методами объектно-реляционной модели - поиском, сохранением и удалением сущностей.
    PagingAndSortingRepository расшираяет CrudRepository методами распределения по страницам и сортировкой.
  8. Пользователь может сам определять новые интерфейсы для репозиториев согласно своему представлению архитектуры приложения. Для этого интерфейс необходимо пометить как @NoRepositoryBean если интерфейс будет наследоваться от существующего интерфейса репозиториев, или создать свой собственный интерфейс и его реализацию согласно соглашения по именованию (например, ClientRepositoryCustomization и ClientRepositoryCustomizationImpl)
  9. Имена методов интерфейсов репозитория должны соответствовать верблюжемуРегистру и основываться на запроектированных шаблонах чтобы Spring Data их распознал, или полагаться на прилагаемое Query.
    Например,
    Client findByFirstname(String firstname) - найти клиента Client по его полю данных firstname,
    List findByAddress_ZipCode(ZipCode zipCode) - найти список клиентов по почтовому коду, который содержит его поле данных - адрес address,
    List findByEmailAndLastname(EmailAddress email, String lastname) - найти список клиентов по почтовому адресу и фамилии.
    Если держаться за конвенцию именования, то Spring Data генерирует нужный запрос Query.
  10. Spring Data поддерживает интеграцию с Querydsl. который позволяет обобщенно составлять запросы к JPA, Hibernate, JDO, native JDBC, Lucene, Hibernate Search, и MongoDB. Похоже на попытку сделать нечто подобное LINQ, но для java. Не понравилось - Eclipse не подхватил даже с танцами, Intellij Idea разобралась, но осадочек остался. По-моему, шаг с отдельной автогенерацией запросов не удобный. Вот разве что если запросов в проекте много, и их все надо поддерживать в удобочитаемом виде?
  11. MongoDB - хранилище документов в формате BSON - бинарного расширения JSON.
  12. Neo4J - база данных графов, состоит из вершин и их отношений.
  13. Redis - key-value база данных.
  14. Spring Roo - проект SpringSource для управления кодом и его созданием.
  15. Spring REST Exporter - проект SpringSource для доступа к основанным на JPA репозиториям через REST-интерфейс.