В настоящее время я использую Javamelody с загрузкой Spring 4.0.3
Я хотел добавить функцию обновления моих свойств конфигурации (загружаемых из файла и базы данных).
Используя PropertySourceLocator, я в порядке, но при вызове конечной точки привода/обновления источник данных обновляется, вызывая исключение.
Javamelody оборачивает/украшает источник данных с помощью прокси и Spring вызывает Bindable и теперь обнаруживает, что класс Proxy не является экземпляром HikariDatasource
В трекере Javamelody (2027/2018/2019) есть некоторые старые проблемы, связанные с прокси.
Одно из предлагаемых решений — использовать Spring.aop.proxy-target-class, но Spring doc вызывает некоторые проблемы, и если я правильно читаю документ, значение по умолчанию уже true
Какая конфигурация требуется, чтобы /actuator/refresh работал с источником данных, проксируемым Javamelody, в Spring Boot 4?
Вот пример build.gradle, созданный Spring Initialzr. При POST для /actuator/refresh
java.lang.IllegalArgumentException: 'existingValue' must be an instance of com.zaxxer.hikari.HikariDataSource
at org.springframework.util.Assert.isTrue(Assert.java:136) ~[spring-core-7.0.7.jar:7.0.7]
at org.springframework.boot.context.properties.bind.Bindable.withExistingValue(Bindable.java:195) ~[spring-boot-4.0.6.jar:4.0.6]
at org.springframework.boot.context.properties.ConfigurationPropertiesBean.get(ConfigurationPropertiesBean.java:210) ~[spring-boot-4.0.6.jar:4.0.6]
При отладке используется метод boxedTypeIsInstanceOf, который проверяет экземпляр.
Assert.isTrue(existingValue == null || this.type.isArray() || boxedTypeIsInstanceOf(existingValue),
() -> "'existingValue' must be an instance of " + this.type);
Build.gradle:
plugins {
id 'java'
id 'org.springframework.boot' version '4.0.6'
id 'io.spring.dependency-management' version '1.1.7'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
repositories {
mavenCentral()
}
ext {
set('springCloudVersion', "2025.1.1")
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud- starter'
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter- actuator'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-webmvc'
implementation 'net.bull.javamelody:javamelody-spring-boot4-starter:2.6.0'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
runtimeOnly 'com.oracle.database.jdbc:ojdbc11'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud- dependencies:${springCloudVersion}"
}
}
tasks.named('test') {
useJUnitPlatform()
}
В моем application.yml я определил источник данных и открыл конечные точки обновления.
management.endpoints.web.exposure.include: info, health, refresh
Ошибка обновления Spring Boot 4 с источником данных, проксируемым Javamelody (несоответствие Хикари) ⇐ JAVA
Программисты JAVA общаются здесь
1777101664
Anonymous
В настоящее время я использую Javamelody с загрузкой Spring 4.0.3
Я хотел добавить функцию обновления моих свойств конфигурации (загружаемых из файла и базы данных).
Используя PropertySourceLocator, я в порядке, но при вызове конечной точки привода/обновления источник данных обновляется, вызывая исключение.
Javamelody оборачивает/украшает источник данных с помощью прокси и Spring вызывает Bindable и теперь обнаруживает, что класс Proxy не является экземпляром HikariDatasource
В трекере Javamelody (2027/2018/2019) есть некоторые старые проблемы, связанные с прокси.
Одно из предлагаемых решений — использовать Spring.aop.proxy-target-class, но Spring doc вызывает некоторые проблемы, и если я правильно читаю документ, значение по умолчанию уже true
[b]Какая конфигурация требуется, чтобы /actuator/refresh работал с источником данных, проксируемым Javamelody, в Spring Boot 4?[/b]
Вот пример build.gradle, созданный Spring Initialzr. При POST для /actuator/refresh
java.lang.IllegalArgumentException: 'existingValue' must be an instance of com.zaxxer.hikari.HikariDataSource
at org.springframework.util.Assert.isTrue(Assert.java:136) ~[spring-core-7.0.7.jar:7.0.7]
at org.springframework.boot.context.properties.bind.Bindable.withExistingValue(Bindable.java:195) ~[spring-boot-4.0.6.jar:4.0.6]
at org.springframework.boot.context.properties.ConfigurationPropertiesBean.get(ConfigurationPropertiesBean.java:210) ~[spring-boot-4.0.6.jar:4.0.6]
При отладке используется метод boxedTypeIsInstanceOf, который проверяет экземпляр.
Assert.isTrue(existingValue == null || this.type.isArray() || boxedTypeIsInstanceOf(existingValue),
() -> "'existingValue' must be an instance of " + this.type);
Build.gradle:
plugins {
id 'java'
id 'org.springframework.boot' version '4.0.6'
id 'io.spring.dependency-management' version '1.1.7'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
repositories {
mavenCentral()
}
ext {
set('springCloudVersion', "2025.1.1")
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud- starter'
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter- actuator'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-webmvc'
implementation 'net.bull.javamelody:javamelody-spring-boot4-starter:2.6.0'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
runtimeOnly 'com.oracle.database.jdbc:ojdbc11'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud- dependencies:${springCloudVersion}"
}
}
tasks.named('test') {
useJUnitPlatform()
}
В моем application.yml я определил источник данных и открыл конечные точки обновления.
management.endpoints.web.exposure.include: info, health, refresh
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия