Git Product home page Git Product logo

monolithic_arch_springboot's Introduction


monolithic_arch_springboot's People

Contributors

fenixsoft avatar liukay avatar msq0313 avatar wzslw avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

monolithic_arch_springboot's Issues

icyfenix's password doesn't right

I can't log in with default password '123456'.I delete it from database and create an identical account, the password encoded is different from the password in the data.sql.

关于订单支付

PaymentApplicationService中支付订单的逻辑如下,先把订单状态改为支付,再去扣减钱包的钱
这个接口是由"/restful/pay"触发,也就是第三方支付支付成功的前提下才会执行如下逻辑
那么有如下两个问题:
1、第三方支付成功了,为什么还要有这个钱包的概念。
2、如下代码的执行顺序是把订单改为支付成功,再去扣减钱包的余额,但是此时余额不足的情况下,订单状态依然是支付成功的。
public void accomplishPayment(Integer accountId, String payId) {
// 订单从冻结状态变为派送状态,扣减库存
double price = paymentService.accomplish(payId);
// 扣减货款
walletService.decrease(accountId, price);
// 支付成功的清除缓存
settlementCache.evict(payId);
}

自动冲销解冻的触发器的并发问题

timer.schedule(new TimerTask() { public void run() { synchronized (payment.getPayId().intern()) { // 使用2分钟之前的Payment到数据库中查出当前的Payment Payment currentPayment = paymentRepository.findById(payment.getId()).orElseThrow(() -> new EntityNotFoundException(payment.getId().toString())); if (currentPayment.getPayState() == Payment.State.WAITING) { log.info("支付单{}当前状态为:WAITING,转变为:TIMEOUT", payment.getId()); accomplishSettlement(Payment.State.TIMEOUT, payment.getPayId()); } } } }, payment.getExpires());

1.先findById,2.再判断状态,3,再执行accomplishSettlement
如果产生并发可能产生在accomplishSettlement之前payment已经被支付了,是否可能产生业务问题。

jdk 18情况下,验证工程的mvnw.cmd package 发现测试失败

jdk 18情况下,下载此工程,然后执行mvnw.cmd package 发现测试失败报错。

报错:

Jacoco java.lang.instrument.IllegalClassFormatException: Error while instrumenting Class

我的解决方法是升级jacoco到0.8.8即可。

接下来另外一个错误是测试用例PaymentResourceTest.updatePaymentState 失败,我暂时标注掉它解决

然后,ProdcutResourceTest.updateAndQueryStockpile失败,我暂时标注掉它解决

在Eclipse内没有这些问题。

java.exe -version
openjdk version "18.0.1" 2022-04-19
OpenJDK Runtime Environment (build 18.0.1+10-24)
OpenJDK 64-Bit Server VM (build 18.0.1+10-24, mixed mode, sharing)

再idea下无法启动

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'JWTAccessToken': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]

需要修改pom.xml的maven-compiler-plugin增加-parameters参数,否则登录时提示“Null key returned for cache operation (maybe you are using named params on classes without debug info?) caches=[value] | key='#xxx' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='' | sync='false'”

需要修改pom.xml的maven-compiler-plugin增加-parameters参数,否则登录时提示“Null key returned for cache operation (maybe you are using named params on classes without debug info?) caches=[value] | key='#xxx' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='' | sync='false'”

事务问题

/**
* 执行操作(带自定义的失败处理),并根据操作是否成功返回给客户端相应信息
* 封装了在服务端接口中很常见的执行操作,成功返回成功标志、失败返回失败标志的通用操作,用于简化编码
*/
public static Response op(Runnable executor, Consumer exceptionConsumer) {
try {
executor.run();
return CommonResponse.success();
} catch (Exception e) {
exceptionConsumer.accept(e);
return CommonResponse.failure(e.getMessage());
}
}

您这边使用线程执行service逻辑,
1、 首先方法会在try中执行,spring事务在执行回滚时,是捕捉运行时异常才会生效,您这样写,我不太理解
2、其次您这个方法类似于多线程执行,但是spring事务默认是在主线程中执行,没有实现跨线程,这样的代码不确定是否生效

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.