首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4j-cypher-dsl java.util.MissingResourceException:找不到包java.util.PropertyResourceBundle的资源,密钥断言。

Neo4j-cypher-dsl java.util.MissingResourceException:找不到包java.util.PropertyResourceBundle的资源,密钥断言。
EN

Stack Overflow用户
提问于 2022-01-21 03:14:02
回答 1查看 81关注 0票数 0

我使用的是Spring 2.6.2 (附带了spring neo4j:6.2.0和ne4j-cypher-dsl:2021.4.1),我有以下错误

代码语言:javascript
复制
java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key assertions.node-required
    at java.base/java.util.ResourceBundle.getObject(ResourceBundle.java:564) ~[na:na]
    at java.base/java.util.ResourceBundle.getString(ResourceBundle.java:521) ~[na:na]
    at org.neo4j.cypherdsl.core.Functions.id(Functions.java:57) ~[neo4j-cypher-dsl-2021.4.1.jar:2021.4.1]
    at org.neo4j.cypherdsl.core.AbstractNode.internalId(AbstractNode.java:96) ~[neo4j-cypher-dsl-2021.4.1.jar:2021.4.1]
    at org.springframework.data.neo4j.core.mapping.CypherGenerator.prepareSaveOf(CypherGenerator.java:337) ~[spring-data-neo4j-6.2.0.jar:6.2.0]
    at org.springframework.data.neo4j.core.Neo4jTemplate.lambda$saveImpl$2(Neo4jTemplate.java:394) ~[spring-data-neo4j-6.2.0.jar:6.2.0]
    at org.springframework.data.neo4j.core.DefaultNeo4jClient$RunnableStatement.runWith(DefaultNeo4jClient.java:208) ~[spring-data-neo4j-6.2.0.jar:6.2.0]
    at org.springframework.data.neo4j.core.DefaultNeo4jClient$DefaultRecordFetchSpec.one(DefaultNeo4jClient.java:453) ~[spring-data-neo4j-6.2.0.jar:6.2.0]
    at org.springframework.data.neo4j.core.Neo4jTemplate.saveImpl(Neo4jTemplate.java:398) ~[spring-data-neo4j-6.2.0.jar:6.2.0]
    at org.springframework.data.neo4j.core.Neo4jTemplate.save(Neo4jTemplate.java:343) ~[spring-data-neo4j-6.2.0.jar:6.2.0]
    at org.springframework.data.neo4j.repository.support.SimpleNeo4jRepository.save(SimpleNeo4jRepository.java:119) ~[spring-data-neo4j-6.2.0.jar:6.2.0]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:289) ~[spring-data-commons-2.6.0.jar:2.6.0]
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137) ~[spring-data-commons-2.6.0.jar:2.6.0]
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) ~[spring-data-commons-2.6.0.jar:2.6.0]
    at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:529) ~[spring-data-commons-2.6.0.jar:2.6.0]
    at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285) ~[spring-data-commons-2.6.0.jar:2.6.0]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:638) ~[spring-data-commons-2.6.0.jar:2.6.0]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14]
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:163) ~[spring-data-commons-2.6.0.jar:2.6.0]
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:138) ~[spring-data-commons-2.6.0.jar:2.6.0]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14]
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) ~[spring-data-commons-2.6.0.jar:2.6.0]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14]
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.14.jar:5.3.14]
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.14.jar:5.3.14]
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.14.jar:5.3.14]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14]
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.14.jar:5.3.14]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.14.jar:5.3.14]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.14.jar:5.3.14]
    at com.sun.proxy.$Proxy198.save(Unknown Source) ~[na:na]
    at com.acme.FooBarDao.save(FooBarDao.java:82) ~[classes/:na]
...

FooBarDao.java:82行是对节点存储库的简单调用,如下所示

代码语言:javascript
复制
fooBarNodeRepository.save(fooBarNode);

FooBarNodeRepository是一个简单的节点存储库,如下所示:

代码语言:javascript
复制
public interface FooBarNodeRepository extends Neo4jRepository<FooBarNode, Long> {
    Optional<FooBarNode> findByGid(String gid);

    void deleteByGid(String gid);

    @Query("MATCH (n:FooBar) WHERE n.gid = $gid RETURN id(n)")
    Long getIdByGid(String gid);
}

在Spring 2.5.2下,相同的代码没有问题。

我已经做了一些调试,异常从org.neo4j.cypherdsl.core.Functions第57行抛出,如下所示

代码语言:javascript
复制
Assertions.notNull(node, Cypher.messages.getString(MessageKeys.ASSERTIONS_NODE_REQUIRED));

Cypher.messages节点不为空,并且由于某种原因,没有加载。

EN

回答 1

Stack Overflow用户

发布于 2022-01-21 07:12:55

根本问题已经找到了。

在日志中启用跟踪时,我在日志中找到了跟踪:

代码语言:javascript
复制
2022-01-21 10:29:20.484 TRACE 19636 --- [  restartedMain] .i.s.PathMatchingResourcePatternResolver : Resolved classpath location [messages.properties] to resources [URL [file:/E:/AcmeFoobar/target/classes/messages.properties], URL [jar:file:/C:/Users/tariqd/.m2/repository/org/neo4j/neo4j-cypher-dsl/2021.4.1/neo4j-cypher-dsl-2021.4.1.jar!/messages.properties]]
2022-01-21 10:29:20.484 TRACE 19636 --- [  restartedMain] utoConfiguration$ResourceBundleCondition : Condition MessageSourceAutoConfiguration.ResourceBundleCondition on org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration matched due to ResourceBundle found bundle URL [file:/E:/AcmeFoobar/target/classes/messages.properties]

因此Spring正在向Cypher.messages注入该项目的messages.properties,而不是新4j密码dsl。

作为概念的证明,我将neo4j-cypher-dsl-2021.4.1.jar!/messages.properties的内容插入到项目的messages.properties的尾部,它起了作用。

以上内容暂时可以用来解决问题,但是由于messages.properties在任何Spring应用程序中都是默认的,所以我建议采用以下修复方法:

neo4j-cypher-dsl/messages.properties重命名为org.neo4j.cypherdsl.core.Cypher中的neo4j-cypher-dsl/neo4j-cypher-dsl-messages.properties

  • Update第56行,如下所示:

代码语言:javascript
复制
static final ResourceBundle messages = ResourceBundle.getBundle("neo4j-cypher-dsl-messages");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70795952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档