Spring Boot/Spring Data Jpa: где свойство «spring.jpa.properties.hibernate.generate_statistics» читается в коде Java?

Я просмотрел Общие свойства приложений справочную страницу. Он содержит список часто используемых пружинных реквизитов, а значения этих свойств можно определить в application.properties или application.yml.

Итак, просто чтобы изучить и выяснить соглашение о том, как и где вышеуказанные реквизиты объявляются (читаются) в java-коде, я начал искать в коде spring-data-jpa связанные свойства. Из этого ответа SOF я увидел, что spring.datasource.driverClassName недвижимость находится в org.springframework.boot.autoconfigure.jdbc.DataSourceProperties, то есть в источнике

Точно так же я хочу найти код для других свойств, таких как spring.jpa.properties.hibernate.cache.use_query_cache props и spring.jpa.properties.hibernate.generate_statistics. Я смотрел на spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm, но не мог найти ни одного.

Любые предложения высоко ценятся.

Я просто пытаюсь понять весеннюю загрузку немного глубже.

Примечание: я смог найти spring.jpa, но не указанный выше реквизит.

Если вы нашли spring.jpa, я также вижу properties ...(Map<String,String>) (это передается "jpa-провайдеру" как есть)

xerx593 29.10.2022 17:13

@ xerx593 - так где еще искать все реквизиты, которые использует конкретная реализация. Поиск обширного списка реквизитов со всеми возможными значениями кажется интересным и полезным.

samshers 30.10.2022 09:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
141
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Такое поведение упоминается в документах следующим образом:

Привязка a.b=c к Map<String, String> сохранит файл . в ключе и вернуть карту с записью {"a.b"="c"}

JpaProperties теперь определяется как

@ConfigurationProperties(prefix = "spring.jpa")
public class JpaProperties {

    /**
     * Additional native properties to set on the JPA provider.
     */
    private Map<String, String> properties = new HashMap<>();

    .....
}

Префикс — spring.jpa, а имя поля карты — properties. Итак, учитывая следующие свойства:

spring.jpa.properties.hibernate.cache.use_query_cache=true
spring.jpa.properties.foo=bar

будет привязан к этой карте свойств со следующими записями:

key=hibernate.cache.use_query_cache, value=true
key=foo, value=bar

Эта карта свойств будет напрямую передана в следующий JPA API для создания EntityManagerFactory:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("somePersistenceUnit", properties) 

Таким образом, с точки зрения spring-boot значения этой карты свойств прозрачны для него. Spring boot не будет заботиться о том, является ли значение в этой карте свойств допустимым или нет, поскольку он просто передает его в Hibernate, чтобы он мог его обработать.

Поэтому, если вы хотите узнать все возможные значения свойств, вам нужно свериться с исходными кодами hibernate, а не с spring-boot.

это в значительной степени отвечает на него. +1

samshers 31.10.2022 19:05

Другие вопросы по теме