报错
查看报表时,前端无法返回数据,后端报错
java.lang.RuntimeException: org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.reflect.UndeclaredThrowableException
org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.reflect.UndeclaredThrowableException
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:431)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:447)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:277)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:656)
at dnn.module.storage.service.WareHouseService$$EnhancerBySpringCGLIB$$ee391476.findOne(<generated>)
at dnn.module.storage.dubbo.WareHouseDsiImpl.findOne(WareHouseDsiImpl.java:29)
at com.alibaba.dubbo.common.bytecode.Wrapper38.invokeMethod(Wrapper38.java)
at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:46)
at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:72)
at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:53)
at dnn.framework.dubbo.DubboProviderFilter.invoke(DubboProviderFilter.java:41)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at io.seata.integration.dubbo.alibaba.AlibabaDubboTransactionPropagationFilter.invoke(AlibabaDubboTransactionPropagationFilter.java:68)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:64)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:42)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:78)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.filter.ContextFilter.invoke(
报错原因
- 查看报错原因,里边有一条提示
分析原因
- 在调用dubbo服务的时候,对应的
dubbo
服务出错,所以报错了。
解决措施
- 1.首先要在
C:\Users\王美娜
类似这种相同的路径下面放入一个dubbo-resolve.properties
文件。 - 2.在
workspace
中该项目的同名文件。 - 3.设置该文件的dubbo地址,
127.0.0.1
表示本地的地址,后边的端口号30137
为提供项目所对应的dubbo协议接口
,该端口可以从项目application-local.properties
文件中获得。 - 4.修改完相关的配置后,一定要重启提供服务与被服务的两个项目。
注意问题
- 1.注意配置时要根据报错提示来进行配置,无关的不用配置,相关需要进行配置的
dubbo
会在报错日志中进行提示。 - 2.寻找项目配置该
dubbo
时,一定不要盲目寻找项目进行配置,提供dubbo的项目一定要含有日志中所报错的dubbo服务。
拓展
1.类似错误
2.项目启动错误
useSSL=false
Establishing SSL connection without server’s identity verification is not recommended. According to MySQL 5.5.45+,
5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn’t set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to ‘false’. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
原因
- 原因是
MySQL
在高版本需要指明是否进行SSL
连接。SSL协议提供服务主要: 1)认证用户服务器,确保数据发送到正确的服务器; . 2)加密数据,防止数据传输途中被窃取使用; 3)维护数据完整性,验证数据在传输过程中是否丢失; 当前支持SSL协议两层: SSL记录协议(SSL Record Protocol):建立靠传输协议(TCP)高层协议提供数据封装、压缩、加密等基本功能支持 SSL握手协议(SSL Handshake Protocol):建立SSL记录协议用于实际数据传输始前通讯双进行身份认证、协商加密 算法、 交换加密密钥等。
解决措施及useSSL=false与useSSL=true的区别。
在mysql
进行连接的时候,如果mysql
的版本是5.7
之后的版本必须要加上useSSL=false
,mysql5.7
以及之前的版本则不用进行添加useSSL=false
,会默认为false
,一般情况下都是使用useSSL=false
,尤其是在将项目部署到linux
上时,一定要使用useSSL=false
!!!,useSSL=true
是进行安全验证,一般通过证书或者令牌什么的,useSSL=false
就是通过账号密码进行连接,通常使用useSSL=false
.
3.dubbo错误
出现原因
dubbo只注册:设置为false
为禁止注册。
解决措施
将false
改为true
。
dubbo只注册
只订阅的含义就是当前应用只会消费所需接口,就算有提供接口,也不会注册到注册中心。
配置形式:默认值都是
true
,false
表示禁止注册dubbo.provider.register=false dubbo.registry.register=false dubbo.protocol.register=false
上面三个配置都会禁止注册当前应用的所有接口到注册中心,即使我们在接口上显示@DubboService(register = true)
,也不会注册接口到注册中心。
知识更新
dubbo
设置成false
表达的含义为不主动对外暴露,是为了避免本地对业务逻辑修改时,如果本地的dubbo
服务对外暴露,由于注册中心分配调用的提供者无法指定,因为会导致其他人调用到自己的dubbo
服务。设置成不暴露后依旧可以通过直接指定ip:端口
调起。