本文主要是介绍流水账-20240314,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- Linux系统删除文件后,磁盘大小没变化
- mysql事务和neo4j事务冲突误诊
- 描述
- 解决方法
- 网上提供的方法
- 重置Neo4j密码,成功解决问题
- 高版本
- 低版本
Linux系统删除文件后,磁盘大小没变化
lsof +L1|grep 删除的文件名
kill
进程
mysql事务和neo4j事务冲突误诊
org.springframework.transaction.CannotCreateTransactionException: Could not open Neo4j Session for transaction; nested exception is org.neo4j.driver.v1.exceptions.AuthenticationException: The client is unauthorized due to authentication failure.at org.springframework.data.neo4j.transaction.Neo4jTransactionManager.doBegin(Neo4jTransactionManager.java:203)at org.sp...at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:270)at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)at java.lang.Thread.run(Thread.java:748)
Caused by: org.neo4j.driver.v1.exceptions.AuthenticationException: The client is unauthorized due to authentication failure.at org.neo4j.driver.internal.util.ErrorUtil.newNeo4jError(ErrorUtil.java:58)at org.neo4j.driver.internal.async.inbound.InboundMessageDispatcher.handleFailureMessage(InboundMessageDispatcher.java:142)at org.neo4j.driver.internal.messaging.PackStreamMessageFormatV1$ReaderV1.unpackFailureMessage(PackStreamMessageFormatV1.java:337)at org.neo4j.driver.internal.messaging.PackStreamMessageFormatV1$ReaderV1.read(PackStreamMessageFormatV1.java:301)at org.neo4j.driver.internal.async.inbound.InboundMessageHandler.channelRead0(InboundMessageHandler.java:83)at org.neo4j.driver.internal.async.inbound.InboundMessageHandler.channelRead0(InboundMessageHandler.java:35)at
描述
在使用mybatis-plus
提供的批量插入方法的时候,报了上面的neo4j
的错,实际上并不涉及neo4j
操作
解决方法
项目中配置了mysql
和neo4j
,怀疑是事务冲突导致的,然后走了一圈弯路,因为根本没用到neo4j
,所以一直没管上面的报错(neo4j
服务连不上),结果发现并不是事务冲突导致的,就是neo4j
连不上导致的。重置neo4j
密码,连接成功之后,问题解决。在事务提交阶段,可能会检查所有参与事务的数据源,是否都能正常提交,因此批量保存方法事务中,虽然只对 MySQL 执行了操作,但 Neo4j 连接有问题,也会在事务提交时,导致整个事务回滚!
网上提供的方法
-
创建一个新的事务
@Service public class YourService {@Autowiredprivate DataSource mysqlDataSource; // 引入MySQL数据源@Autowiredprivate PlatformTransactionManager transactionManager; // 引入事务管理器public void yourMethod(List<YourEntity> entities) {TransactionTemplate template = new TransactionTemplate(transactionManager);template.setIsolationLevel(TransactionDefinition.ISOLATION_DEFAULT);template.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);template.execute(new TransactionCallbackWithoutResult() {@Overrideprotected void doInTransactionWithoutResult(TransactionStatus status) {yourService.saveBatch(entities); // 调用带有@Transactional的方法}});} }
-
确保注解
@EnableTransactionManagement
只作用在想要的数据源事务管理器上 -
按照上面方法试了半天也没解决,因为压根不是事务冲突导致的,
SpringBoot
项目一般不需要配置这些,默认使用的事务就是配置的第一个数据源
重置Neo4j密码,成功解决问题
高版本
-
停止 Neo4j 服务:
bin/neo4j stop
-
直接编辑 Neo4j 配置文件:
conf/neo4j.conf
,找到dbms.security.auth_enabled
参数,将其设置为false
来禁用身份验证
-
启动 Neo4j 服务:
bin/neo4j start
-
登录页面:
通过浏览器访问Neo4j
的图形界面(地址通常是http://localhost:7474
或http://your_ip:7474
),由于身份验证已禁用,可以直接进入。
-
Cypher
语句修改密码:ALTER USER neo4j SET PASSWORD 'new_password';
CALL dbms.changePassword('neo4j', 'old_password', 'new_password'); CALL dbms.changePassword('neo4j', '', 'new_password');
低版本
上面通过Cypher
语句修改密码失败,因为项目使用的Neo4j 3.5
版本,不支持Cypher
语句更改用户密码,通过以下替代方法修改:
-
通过
REST API
删除原有用户(neo4j
),然后再创建一个新的管理员用户,设置新密码
curl -X DELETE http://localhost:7474/user/neo4j
curl -X POST -H "Content-Type: application/json" -d '{"password":"new_password", "username": "neo4j", "roles": ["admin"]}' http://localhost:7474/user
-
直接清空
graph.db
目录(不建议,个人环境随意)
这篇关于流水账-20240314的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!