스프링 부트 데이터 카산드라 반응성 JmxReporter 문제
프로젝트를 Spring-boot Version 2.1.0으로 업데이트했습니다.풀어주다.
이제 다음과 같은 오류가 발생합니다.
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.cassandra.ReactiveSession]: Factory method 'reactiveSession' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'session' defined in class path resource [ch/sbb/kat/fc/config/CassandraConfig.class]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: com/codahale/metrics/JmxReporter
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
at org.springframework.beans.factory.support.ConstructorResolver.lambda$instantiate$2(ConstructorResolver.java:615)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:614)
... 120 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'session' defined in class path resource [ch/sbb/kat/fc/config/CassandraConfig.class]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: com/codahale/metrics/JmxReporter
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1745)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:339)
at ch.sbb.kat.fc.config.CassandraConfig$$EnhancerBySpringCGLIB$$a22674d7.session(<generated>)
at org.springframework.data.cassandra.config.AbstractCassandraConfiguration.getRequiredSession(AbstractCassandraConfiguration.java:66)
at org.springframework.data.cassandra.config.AbstractReactiveCassandraConfiguration.reactiveSession(AbstractReactiveCassandraConfiguration.java:47)
at ch.sbb.kat.fc.config.CassandraConfig$$EnhancerBySpringCGLIB$$a22674d7.CGLIB$reactiveSession$7(<generated>)
at ch.sbb.kat.fc.config.CassandraConfig$$EnhancerBySpringCGLIB$$a22674d7$$FastClassBySpringCGLIB$$7973a63.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363)
at ch.sbb.kat.fc.config.CassandraConfig$$EnhancerBySpringCGLIB$$a22674d7.reactiveSession(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
... 123 more
Caused by: java.lang.NoClassDefFoundError: com/codahale/metrics/JmxReporter
at com.datastax.driver.core.Metrics.<init>(Metrics.java:146)
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1501)
at com.datastax.driver.core.Cluster.init(Cluster.java:208)
at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:376)
at com.datastax.driver.core.Cluster.connect(Cluster.java:332)
at org.springframework.data.cassandra.config.CassandraCqlSessionFactoryBean.connect(CassandraCqlSessionFactoryBean.java:89)
at org.springframework.data.cassandra.config.CassandraCqlSessionFactoryBean.afterPropertiesSet(CassandraCqlSessionFactoryBean.java:82)
at org.springframework.data.cassandra.config.CassandraSessionFactoryBean.afterPropertiesSet(CassandraSessionFactoryBean.java:59)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.lambda$invokeInitMethods$5(AbstractAutowireCapableBeanFactory.java:1795)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1794)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1741)
... 143 more
Caused by: java.lang.ClassNotFoundException: com.codahale.metrics.JmxReporter
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 155 more
이번 호에 소개된 속성 https://github.com/spring-projects/spring-boot/issues/14778 을 사용하는 것은 제 문제를 해결하는 데 아무런 효과가 없는 것 같습니다.
어떻게 하면 카산드라에 대한 jmx를 비활성화할 수 있습니까?
현재 카산드라 구성은 다음과 같습니다.
@Configuration
@EnableReactiveCassandraRepositories({"repository"})
public class CassandraConfig extends AbstractReactiveCassandraConfiguration {
@Value("${cassandra.host}")
private String host;
@Override
protected String getKeyspaceName() {
return "keyspace";
}
@Override
public String[] getEntityBasePackages() {
return new String[]{"model"};
}
@Override
public SchemaAction getSchemaAction() {
return SchemaAction.CREATE_IF_NOT_EXISTS;
}
@Override
public String getContactPoints() {
return host;
}
}
그spring.data.cassandra.jmx-enabled
속성은 Spring Boot이 Cassandra를 자동으로 구성할 때 사용됩니다.Cluster
콩. 늘림으로.AbstractReactiveCassandraConfiguration
다음을 위해 이 자동 구성을 끕니다.Cluster
에 의해 만들어지는 콩AbstractClusterConfiguration
그것은 최고의 클래스입니다.AbstractReactiveCassandraConfiguration
결과적으로 속성은 아무런 영향을 미치지 않습니다.
문제를 해결할 수 있는 두 가지 방법이 있습니다.
- 제거합니다.
AbstractReactiveCassandraConfiguration
하위 클래스 및 다양한 사용spring.data.cassandra.*
속성을 사용하여 대신 구성할 수 있습니다. - 재정의
cluster
에AbstractClusterConfiguration
에CassandraConfig
,불러super.cluster()
을 얻기 위해CassandraClusterFactoryBean
그리고 나서 전화합니다.setJmxReportingEnabled(false)
반송하기 전에 공장 콩에.
또는 응용 프로그램의 다른 곳에서 DropWizard를 사용하지 않는 경우, Cassandra의 JMX 보고와 호환되는 이전 버전으로 다운그레이드할 수 있습니다.dropwizard-metrics.version
당신의 재산pom.xml
또는build.gradle
.
우선하는 대신에cluster
앤디 윌킨슨이 언급한 것처럼, 당신은 대체적으로 당신을 무시할 수 있습니다.getMetricsEnabled
그래서 그것은 항상 돌아옵니다.false
.
@Override
protected boolean getMetricsEnabled() { return false; }
여기서 답을 해봤는데, 어떻게 된 건지 모르겠지만 오류가 계속됐습니다.저는 이것을 그들이 이사에 대해 이야기했던 docs.datastax.com 에서 읽었습니다.JMX reporting
에Metrics 4
별도의 모듈로,metrics-jmx
문제/오류를 일으킬 수 있다는 점을 분명히 했습니다.
이 문제를 해결하려면 이 방법을 호출해야 했습니다..withoutJMXReporting()
하기와 같이
Cluster cluster = Cluster.builder()
.withoutJMXReporting()
.build();
당신은 여기서 조용히 따라올 수 있습니다.
이전 버전의 라이브러리를 포함하면 다음과 같은 문제도 해결됩니다.
implementation("io.dropwizard.metrics:metrics-core:3.2.2")
@Bean public CassandraClusterFactoryBean 클러스터{CassandraClusterFactoryBean 클러스터=새로운 CassandraClusterFactoryBean(); 클러스터.ContactPoints(environment.getProperty("spring.data.cassandra.contact-points"); 클러스터를 설정합니다.setPort(Integer.parseInt(environment.getProperty("spring.data.cassandra.port")); 클러스터.setJmxReportingEnabled(false); 반환 클러스터; }
무리를 짓다setJmxReportingEnabled(거짓)가 정답인 것 같습니다.
언급URL : https://stackoverflow.com/questions/53101753/spring-boot-data-cassandra-reactive-jmxreporter-problem
'programing' 카테고리의 다른 글
모든 하위 플롯 위에 단일 주 제목을 설정하는 방법 (0) | 2023.06.29 |
---|---|
각도 2 구성 요소 지침이 작동하지 않음 (0) | 2023.06.29 |
Angular 4/5 HttpClient: 문자열 형식의 인수를 'body'에 할당할 수 없습니다. (0) | 2023.06.29 |
to_char 함수를 사용하여 문자열로 구문 분석할 때 Oracle에서 일 및 월 값에서 선행 0을 제거하는 방법은 무엇입니까? (0) | 2023.06.29 |
스프링 부팅 데이터 소스 커밋 문제 (0) | 2023.06.29 |