@Service("codBillingSyncService")
public class CodBillingSyncServiceImpl implements ICodBillingSyncService {
/**
* 用于管理线程的线程池
*/
static Integer corePoolSize = Integer.parseInt(Property.getProperty("COD_TO_BIL_COREPOOLSIZE"));
static Integer maximumPoolSize = Integer.parseInt(Property.getProperty("COD_TO_BIL_MAXIMUMPOOLSIZE"));
static Integer keepaliveTime = Integer.parseInt(Property.getProperty("COD_TO_BIL_KEEPALIVETIME"));
static Integer workqueueSize = Integer.parseInt(Property.getProperty("COD_TO_BIL_WORKQUEUESIZE"));
private static ThreadPoolExecutor exec = new ThreadPoolExecutor(
corePoolSize, maximumPoolSize, keepaliveTime,
TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(
workqueueSize), new ThreadPoolExecutor.CallerRunsPolicy());
@Override
public void sendCodInfoToBillingReal(final OfflineBusiness business,
final BusinessTypeToBil bt, final ReceiveTypeToBil rt,
final TradeTypeToBil tt) {
final CodToBil ctb = OrderUtils.getCodToBil(business, bt, rt, tt);
ctb.setSendStatus(SendStatus.N);
codBillingSyncService.createCodToBil(ctb);
// 如果线程池未满,或缓存队列未满,则执行以下代码.
synchronized (exec) {
if (exec.getPoolSize() < exec.getMaximumPoolSize() || exec.getQueue().size() < workqueueSize) {
// 执行线程
exec.execute(new Runnable() {
@Override
public void run() {
boolean f = false;// 发送是否成功的标志位
CodTradeItem cti = null;
// 发送MQ消息
try {
cti = OrderUtils.getCodTradeItem(ctb);
codBillingSyncService.sendCodInfoToBillingReal(cti);
f = true;
} catch (Exception e) {
logger.error("sendCodCancelInfoToBillingReal error: ", e);
}
// 新增相应的Cod入Bil记录
try {
if (ctb != null) {
if (f) {
//更新状态
codBillingSyncService.updateSendStatus(ctb.getId(), SendStatus.Y);
}
}
} catch (Exception e) {
logger.error("createCodToBil error: ", e);
}
}
});
}
}
}
}
相关推荐
在Spring Boot应用中,我们经常需要处理大量的并发请求,这时自定义异步线程池就显得尤为重要。异步处理能够提高应用的响应速度,避免主线程阻塞,从而提升系统性能。本文将详细介绍两种在Spring Boot中实现自定义...
核心线程数是指线程池中最少的线程数,最大线程数是指线程池中最多的线程数,队列最大线程数是指线程池中队列的最大线程数。 使用 @Async 注解 在 Spring 中,我们可以使用 @Async 注解来将某个方法异步地放到另外...
在添加了线程池Executor的配置后,我们可以在Controller或Service类中使用@Resource注解来注入线程池Executor,以便在业务逻辑中使用线程池进行并发操作。例如: ```java @Controller public class IndexController ...
Spring线程池是Spring框架中的一个线程池实现,它提供了一个TaskExecutor接口,该接口提供了execute、submit等方法来管理线程池。Spring线程池可以通过@Configuration和@EnableAsync注解来配置。 在使用Spring...
Spring XML配置是Spring框架中的一种常见方式,用于定义和管理应用程序中的bean及其依赖关系。以下是对Spring XML配置的12个技巧的详细说明: 1. 避免使用自动装配:Spring提供了自动装配功能,通过匹配bean属性或...
在Spring Boot应用中,使用线程池和异步处理是提高系统并发性能和响应速度的重要手段。`@Async`注解是Spring提供的一个特性,用于标记方法为异步执行,这样可以避免主线程等待耗时的操作,提高系统效率。本文将详细...
在SpringBoot应用中,这部分可以通过Service层实现。 - **数据访问层(Data Access Layer)**:与数据库交互,负责数据的存取。MyBatis在这里起到关键作用,通过Mapper接口与SQL映射文件实现SQL的执行。 4. **...
4. 编写定时任务类,可以是普通的Java类,通过`@Component`或`@Service`注解将其纳入Spring管理,然后使用`@Scheduled`或实现`Job`接口。 5. 如果使用Quartz,还需要创建`Job`类,定义具体的业务逻辑,并创建对应的`...
在Spring Boot应用中,事务管理和多线程是两个非常关键的特性,特别是在处理复杂的业务逻辑时。本示例将深入探讨如何使用注解来实现事务控制以及如何在Spring Boot中运用多线程。 首先,让我们关注"注解事务"。在...
在 Spring Boot 中执行异步任务时,默认情况下使用的是默认的线程池,但是,在实际项目中,我们可能需要根据项目的需求来定制自己的线程池。下面将介绍如何在 Spring Boot 中使用自定义配置的线程池执行 Async 异步...
Spring 中默认创建 SimpleAsyncTaskExecutor 线程池,但并不推荐使用这个默认线程池。SimpleAsyncTaskExecutor 线程池的弊端在于,容易造成 OOM 问题,因为程序每次请求线程资源,SimpleAsyncTaskExecutor 线程池...
Spring 提供了一系列注解,如 @Component、@Service、@Repository 和 @Controller,用于组件扫描和依赖注入。@Autowired 注解用于自动装配依赖,@Qualifier 用于指定注入的bean。此外,还有 @PostConstruct 和 @...
6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...
Spring的TaskExecutor是Java线程池抽象的一个重要组成部分,它为开发者提供了一种在Spring框架内使用线程池的方式,而无需直接依赖于特定的Java版本或Java EE环境中的线程池实现。TaskExecutor接口的设计使得在不同...
首先,Spring的注解主要分为三类:配置注解(如@Configuration)、元数据注解(如@Component、@Service、@Repository和@Controller)和注入注解(如@Autowired、@Value)。这些注解使得我们可以在不编写XML配置的...
`TaskExecutor`是Spring的核心组件,负责线程池的管理,用于执行异步任务。 ```java @Configuration @EnableAsync public class AsyncConfig implements AsyncConfigurer { @Override public Executor ...
通过学习这个示例,开发者可以更好地理解如何在Spring中配置和使用线程池,从而高效地处理并发任务,提高应用程序的性能。这个项目的源代码可以在`Spring_ThreadPoolExecutor`这个压缩包中找到,供学习和参考。
在IT行业中,开发Web服务是常见的需求,而CXF和Spring框架的结合为开发者提供了一种高效、灵活的方式来实现Web Service。本篇将深入探讨如何利用CXF和Spring来创建、部署和消费Web Service。 CXF,全称CXF Commons ...
Spring Job,通常指的是Spring框架中的任务调度模块,用于在特定时间执行一次或重复性的任务。在Spring中,我们可以使用Spring Batch、Spring Integration或是Spring Task来实现定时任务。本篇文章将详细探讨Spring ...