Java-Bean管理之异步代理方法

Java-Bean管理,实现同步/异步管理

    本文介绍利用Spring的Bean管理,结合自己封装的ThreadPoolExecutor线程池,利用注解的方式,实现方法的异步管理;

    常用异步方法:不影响系统正常执行、可后台操作、对数据安全性要求差、等等诸如此类的业务逻辑。如日志的操作,短信发送、用户信息的更新等。异步在一定程度上能够提升系统的响应度,但不合理的设计或是代码的不合理运用会导致一场灾难~

    以下代码仅供学习参考,实用性、合理性及安全性仍需检测,也欢迎茫茫人海之中的你能够给一板砖~

1 环境搭建

    1.1 引入Spring依赖

	<properties>
		<spring.version>4.3.2.RELEASE</spring.version>
	</properties>
	<dependencies>
		<!-- spring support -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
		    <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
		</dependency>

2.核心实现

    2.1 异步处理器:InvocationHandler

package com.nieli.proxy;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.nieli.base.config.Configuration;

/**
 *@描述:
 *@版权: Copyright (c) 2018
 *@作者: nieli
 *@版本: 1.0
 *@创建日期: 2018年01月29日
 *@创建时间: 10:17
 */
public class InvocationHandler<T> implements java.lang.reflect.InvocationHandler
{
    
    private static final Logger                logger                          = LoggerFactory
                                                                                       .getLogger(InvocationHandler.class);
    
    //线程池线程名称前缀
    public static final String                 POOL_THREAD_NAME_PREFIX         = Configuration.getString(
                                                                                       "proxy.poolThreadNamePrefix",
                                                                                       "Async-Invoke-Thread-");
    
    //异步执行线程池大小 默认:CPU个数 * 2
    private static final int                   ASYNC_THREAD_POOL_CORE          = Configuration
                                                                                       .getInt("proxy.asyncThreadPoolCore",
                                                                                               Runtime.getRuntime()
                                                                                                       .availableProcessors() * 2);
    
    //异步执行线程池队列大小 默认:10000
    private static final int                   ASYNC_THREAD_POOL_QUEUE_CORE    = Configuration
                                                                                       .getInt("proxy.asyncThreadPoolQ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值