プロジェクトをspring-bootバージョン2.1.0.RELEASEに更新しました。
次のエラーが表示されます。
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 は私の問題を解決する効果がないようです。
Cassandraのjmxを無効にするにはどうすればよいですか?
私の現在のcassandra configは次のようになります。
@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
Beanを自動構成するときに使用されます。AbstractReactiveCassandraConfiguration
を拡張することにより、この自動構成をオフに切り替えます。 Cluster
のスーパークラスであるAbstractClusterConfiguration
によって作成されたAbstractReactiveCassandraConfiguration
Bean。その結果、プロパティは無効になります。
問題を解決する方法は2つあります。
AbstractReactiveCassandraConfiguration
サブクラスを削除し、代わりにさまざまなspring.data.cassandra.*
プロパティを使用して設定します。cluster
のAbstractClusterConfiguration
でCassandraConfig
をオーバーライドし、super.cluster()
を呼び出してCassandraClusterFactoryBean
を取得し、ファクトリBeanでsetJmxReportingEnabled(false)
を呼び出してからそれを返す。あるいは、アプリケーションの他の場所でDropwizardを使用していない場合、dropwizard-metrics.version
またはpom.xml
のbuild.gradle
プロパティをオーバーライドすることで、CassandraのJMXレポートと互換性のある古いバージョンにダウングレードできる場合があります。
andy Wilkinsonが言及したcluster
をオーバーライドする代わりに、代わりにgetMetricsEnabled
をオーバーライドして、常にfalse
を返すようにすることもできます。
@Override
protected boolean getMetricsEnabled() { return false; }
ライブラリの古いバージョンを含めると、問題も修正されます。
implementation("io.dropwizard.metrics:metrics-core:3.2.2")
私はここで答えを試しましたが、方法はわかりませんが、エラーはまだ続きました。私はこれを docs.datastax.com から読みました。そこで彼らは_JMX reporting
_の_Metrics 4
_を別のモジュール_metrics-jmx
_に移動することについて話しました。彼らはそれが問題/エラーを引き起こすかもしれないことを明らかにしました。
これを修正するには、次のようにこのメソッドを呼び出す必要がありました.withoutJMXReporting()
.
_Cluster cluster = Cluster.builder()
.withoutJMXReporting()
.build();
_
静かにフォローできます here