==================== TLDR ==========================
@markerikson(请参阅已接受的答案)亲切地指出了当前的解决方案和未来的解决方案。
编辑:2020 年 11 月 15 日:链接到文档以在 Slice 中使用 Async Thunk
RTK确实支持使用 thunk 中间件的 reducer 中的 thunk(参见答案)。
在 1.3.0 版本(目前 alpha 于 2020 年 2 月)中,有一个辅助方法createAsyncThunk() createAsyncThunk将提供一些有用的功能(即根据 Promise的状态触发 3 个“扩展”reducer)。
========================原始帖子 2020 年 2 月====================== ====
我对 Redux 很陌生,遇到了 Redux Toolkit (RTK) 并希望实现它提供的更多功能(或者在这种情况下可能没有?)(2020 年 2 月)
我的应用程序分派到通过创建的减速器切片createSlice({})(请参阅createSlice api docs)
到目前为止,这非常有效。我可以轻松地使用内置dispatch(action)和useSelector(selector)调度动作,并在我的组件中很好地接收/响应状态变化。
我想使用 axios 的异步调用从 API …
#!/usr/bin/env python3
import binascii
var=binascii.a2b_qp("hello")
key=binascii.a2b_qp("supersecretkey")[:len(var)]
print(binascii.b2a_qp(var))
print(binascii.b2a_qp(key))
#here i want to do an XOR operation on the bytes in var and key and place them in 'encryption': encryption=var XOR key
print(binascii.b2a_qp(encrypted))
Run Code Online (Sandbox Code Playgroud)
如果有人能够告诉我如何实现这一目标,我将非常高兴.对于整个数据类型的转换来说是非常新的所以是的...通过python wiki阅读并不像我想的那样清晰:(.
我已经研究了好几个小时了,但当我将实体保存在封装事务中时,我找不到一种方法来绕过 JPARepository 自动启动/提交事务的问题。
我总共创建了 3 个实体。前 2 个实体将被创建,以便在创建第三个实体时ClientAdmin,实体可以在持久化之前形成关系。CreditPotInstitution
当抛出异常时,我希望它能够使创建的实体不被提交(即整个过程回滚)。
目前,我可以在日志中看到 JPA Save 方法可能会启动自己的事务(我不完全理解日志),这会导致已repo.save(entity)调用的实体在自己的事务中提交?
任何帮助将不胜感激。
@Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
public void createInstitution(InstitutionSignUpForm form) throws Exception {
//Create Admin account.
ClientAdmin clientAdmin = new ClientAdmin();
clientAdmin.setRole(roleRepo.findOneByRole("SUPER_ADMIN").orElseThrow(() -> new Exception("Can not resolve role SUPER_ADMIN")));
clientAdmin.setPassword(passwordEncoder.encode(form.getPassword()));
clientAdmin.setUsername(form.getUsername());
clientAdmin = clientAdminRepo.save(clientAdmin);
//Create Credit Pot for institution.
CreditPot creditPot = new CreditPot();
creditPot.setIsPrimaryPot(true);
creditPot.setName("Primary Credit Pot");
creditPot.setCredits(300L);
creditPot = creditPotRepo.save(creditPot);
System.out.println("Throwing Exception.");
if(1==1) throw new Exception("!!!", new …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何解决最初看起来“简单”的问题。
我UserAccounts认为可以有很多Purcahse秒,但商业逻辑使然只能有一个Purchase在PurchaseState.IDLE状态(在实体领域)。Apurchase在第一次创建时是空闲的。
我有一个存储库,其中包含一种方法来确定用户是否购买了已存在给定状态的产品:
boolean existsByPurchaseStateInAndUserAccount_Id(List<PurchaseState> purchaseState, long userAccountId);
Run Code Online (Sandbox Code Playgroud)
我注意到一些测试并认为当两个请求非常接近/同时传递时(即并发问题和/或竞争条件),我可以创建多个购买。
这导致用户帐户有两次购买,并且都具有 IDLE 状态。
现在,有没有办法使用 @Transactional 来导致第二个持久性/事务回滚?我不确定简单地包装服务方法@Transcational(isolation=REPEATED_READ)
是否会缓解这个问题?即有没有办法 SQL 将处理这个事务?
我只能猜测这实际上并没有帮助,因为 SQL 事务没有跟踪existsBy,因此不会回滚?
countBy如果存在 >1 个符合条件的实体,是否是在方法结束时运行第二个查询以回滚事务的唯一真正解决方案?我仍然不觉得这是“完美的”并完全解决了竞争条件/TX 问题......
因此,该服务将看到有 2 个实体在两个事务中提交(尚未提交),但对于 T2,该服务可以抛出 RuntimeException 以触发回滚?
抱歉,我一直在阅读有关事务隔离的内容,但它似乎只适用于说我是否正在检查实体的字段值/列,而不是使用基于“count(*)”查询返回的逻辑。 ..
谢谢你的任何启示。
我正在使用 Spring Boot 并定义了 3 个 SQL 数据源。我正在使用 SpringBoot 属性为数据源创建 3 个测试容器。
当我运行测试时,容器变得越来越慢,最终我终于得到了异常
Caused by: java.sql.SQLNonTransientConnectionException: Too many connections。
一个测试示例是:
@Test
@DisplayName("Require Client Access.")
@Transactional(transactionManager = "thirdTransactionManager")
@Sql(
scripts = "/db/sql/some_test_data_basic.sql",
config = @SqlConfig(dataSource = "thirdDatasource", transactionManager = "thirdTransactionManager"))
void requireCustomerAccess() throws CompClientAccessException {
//Assertions
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 FlyWay 迁移架构,因此我不确定每个测试类之间 Hikari 或 Flyway 是否在每个方法类导致连接过多后没有关闭其连接池连接?
我有 3 个 TestContainers 通过 Spring 的 props 启动,如下所示。我可以在 docker 中看到它们。
datasource.jdbc.url=jdbc:tc:mysql:8.0.22:///databasename?TC_TEMPFS=/testtempfs:rw
datasource.username=dev
datasource.password=password
Run Code Online (Sandbox Code Playgroud)
DatasourceConf 的片段(三个之一):
datasource.jdbc.url=jdbc:tc:mysql:8.0.22:///databasename?TC_TEMPFS=/testtempfs:rw
datasource.username=dev
datasource.password=password
Run Code Online (Sandbox Code Playgroud)
我猜测 HikariPools 正在为每个测试类重新制作并且不会关闭?
o.h.e.j.s.SqlExceptionHelper : HikariPool-45 - …Run Code Online (Sandbox Code Playgroud) 所以,这是我的代码.它旨在从用户那里获得答案.将他们的答案存储在一个列表中(答案列表.将他们的答案与answer.txt文件的行列表进行比较.
问题是,尽管它们是相同的(查看print()输出),但脚本看不到它们如下:
import time
import os
answerlist = []
check = "N"
score=0
real_answerlist=[]
checkanswerlist=[]
name = input("\nWhat is your FIRST name?\n")
surname = input("\nWhat is your SECOND/surname?\n")
classname = input("\nWhat is your class (e.g. \"8A\")\n")
while check != "Y":
print("Are these detail correct? : "+name + " "+surname+" " + classname+"\n")
check = input("Enter (Y or N)\n")
#ASK QUESTIONS
for i in range(1, 11):
answerlist.insert(i,input("The answer to question "+str(i)+" is: \n"))
#show answers
for i in range (1, 5): …Run Code Online (Sandbox Code Playgroud) java ×3
spring ×3
spring-boot ×3
python ×2
transactions ×2
byte ×1
compare ×1
encryption ×1
flyway ×1
if-statement ×1
list ×1
mysql ×1
operation ×1
redux ×1
redux-thunk ×1