zoukankan      html  css  js  c++  java
  • java工程笔记

    start.sh

    #TITLE=jetty
    
    DEPLOY_PATH=$(cd $(dirname $0)/../ && pwd)
    export DEPLOY_PATH
    
    CLASSPATH=${CLASSPATH}:${DEPLOY_PATH}/lib/start.jar:${DEPLOY_PATH}/configs
    export CLASSPATH
    
    JAVA_OPTIONS="-server -XX:PermSize=64m -XX:MaxPermSize=128m -Xmx512m -Xms256m"
    export JAVA_OPTIONS
    
    DEBUG_PORT=8081
    export DEBUG_PORT
    
    JAVA_DEBUG="-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=${DEBUG_PORT},server=y,suspend=n"
    export JAVA_DEBUG
    
    ${JAVA_HOME}/bin/java ${JAVA_OPTIONS} ${JAVA_DEBUG} -Dclasspath=${DEPLOY_PATH}/lib -Dbasepath=${DEPLOY_PATH} com.dc.jetty.start.Start
    if [ "${doExitFlag}" = "true" ] ; then
        exit
    fi

    log4j.properties

    log4j.rootLogger=info,console,debug,info,warn,error,fatal
    
    log4j.appender.console=org.apache.log4j.ConsoleAppender 
    log4j.appender.console.layout=org.apache.log4j.PatternLayout 
    log4j.appender.console.layout.ConversionPattern=%d [%-5p]  (%F.%M:%L) - %m%n
    
    log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.debug.File=./log/rest/rest_debug
    log4j.appender.debug.DatePattern='.'yyyyMMdd'.log'
    log4j.appender.debug.layout=org.apache.log4j.PatternLayout 
    log4j.appender.debug.layout.ConversionPattern=%d [%-5p]  (%F.%M:%L) - %m%n
    log4j.appender.debug.filter.F1=org.apache.log4j.varia.LevelRangeFilter
    log4j.appender.debug.filter.F1.LevelMin=debug
    log4j.appender.debug.filter.F1.LevelMax=debug
    
    log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.info.File=./log/rest/rest_info
    log4j.appender.info.DatePattern='.'yyyyMMdd'.log'
    log4j.appender.info.layout=org.apache.log4j.PatternLayout 
    log4j.appender.info.layout.ConversionPattern=%d [%-5p]  (%F.%M:%L) - %m%n
    log4j.appender.info.filter.F1=org.apache.log4j.varia.LevelRangeFilter
    log4j.appender.info.filter.F1.LevelMin=info
    log4j.appender.info.filter.F1.LevelMax=info
    
    log4j.appender.warn=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.warn.File=./log/rest/rest_warn
    log4j.appender.warn.DatePattern='.'yyyyMMdd'.log'
    log4j.appender.warn.layout=org.apache.log4j.PatternLayout 
    log4j.appender.warn.layout.ConversionPattern=%d [%-5p]  (%F.%M:%L) - %m%n
    log4j.appender.warn.filter.F1=org.apache.log4j.varia.LevelRangeFilter
    log4j.appender.warn.filter.F1.LevelMin=warn
    log4j.appender.warn.filter.F1.LevelMax=warn
    
    log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.error.File=./log/rest/rest_error
    log4j.appender.error.DatePattern='.'yyyyMMdd'.log'
    log4j.appender.error.layout=org.apache.log4j.PatternLayout 
    log4j.appender.error.layout.ConversionPattern=%d [%-5p]  (%F.%M:%L) - %m%n
    log4j.appender.error.filter.F1=org.apache.log4j.varia.LevelRangeFilter
    log4j.appender.error.filter.F1.LevelMin=error
    log4j.appender.error.filter.F1.LevelMax=error
    
    log4j.appender.fatal=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.fatal.File=./log/rest/rest_fatal
    log4j.appender.fatal.DatePattern='.'yyyyMMdd'.log'
    log4j.appender.fatal.layout=org.apache.log4j.PatternLayout 
    log4j.appender.fatal.layout.ConversionPattern=%d [%-5p]  (%F.%M:%L) - %m%n
    log4j.appender.fatal.filter.F1=org.apache.log4j.varia.LevelRangeFilter
    log4j.appender.fatal.filter.F1.LevelMin=fatal
    log4j.appender.fatal.filter.F1.LevelMax=fatal
    
    #log4j.logger.com.dc.oauth.server=debug
    
    #----------------------------------------------------Ibaits----------------------------------------------------
    #log4j.logger.com.ibatis=debug
    #log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
    #log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
    #log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
    #log4j.logger.java.sql.Connection=debug
    #log4j.logger.java.sql.Statement=debug
    
    #log4j.logger.java.sql.PreparedStatement=debug,stdout
    #log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    #log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    #log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
    
    #log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    #log4j.appender.stdout.Target=System.out
    #log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    #log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601}[%-5p][%c][%t]:%m%n

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <!--
        <welcome-file-list>
            <welcom-file>index.jsp</welcom-file>
        </welcome-file-list>
        -->
        <servlet>
            <servlet-name>restServlet</servlet-name>
            <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
            <init-param>
                <param-name>jersey.config.server.provider.packages</param-name>
                <param-value>com.dc.jetty.server</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>restServlet</servlet-name>
            <url-pattern>/*</url-pattern>
        </servlet-mapping>
    </web-app>

    config.properties

    #jetty
    port=8080
    contextPath=/
    resourceBase=../web
    descriptor=../web/WEB-INF/web.xml
    maxThread=5000
    minThread=100
    
    #返回时间(单位毫秒)
    sleepTime=100

    build.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="jetty" default="package" basedir=".">
        
        <path id="classpath">
            <pathelement location="."/>
            <fileset dir="${basedir}/lib">
                <include name="**/*.jar"/>
            </fileset>
        </path>
        
        <target name="clean">
            <delete dir="${basedir}/all"/>
        </target>
        
        <target name="prepare" depends="clean">
            <mkdir dir="${basedir}/all"/>
            <mkdir dir="${basedir}/all/bin"/>
            <mkdir dir="${basedir}/all/lib"/>
            <mkdir dir="${basedir}/all/web"/>
            <mkdir dir="${basedir}/all/classes"/>
            <mkdir dir="${basedir}/all/configs"/>
        </target>
        
        <target name="copy" depends="prepare">
            <copy todir="${basedir}/all/bin">
                <fileset dir="${basedir}/bin" excludes="**/.svn/**/*.*">
                    <include name="**/*"/>
                </fileset>
            </copy>
            <copy todir="${basedir}/all/lib">
                <fileset dir="${basedir}/lib" excludes="**/.svn/**/*.*">
                    <include name="**/*"/>
                </fileset>
            </copy>
            <copy todir="${basedir}/all/web">
                <fileset dir="${basedir}/web" excludes="**/.svn/**/*.*">
                    <include name="**/*"/>
                </fileset>
            </copy>
            <copy todir="${basedir}/all/configs">
                        <fileset dir="${basedir}/configs" excludes="**/.svn/**/*.*">
                            <include name="**/*"/>
                        </fileset>
                    </copy>
        </target>
        
        <target name="compile" depends="copy">
            <javac srcdir="${basedir}/src" destdir="${basedir}/all/classes" debug="true" deprecation="off" failonerror="true" encoding="utf8" nowarn="on">
                <classpath refid="classpath"></classpath>
            </javac>
        </target>
        
        <target name="package" depends="compile">
            <jar destfile="${basedir}/all/lib/start.jar">
                <fileset dir="${basedir}/all/classes" includes="**/Start.class"/>
            </jar>
            <jar destfile="${basedir}/all/lib/jetty.jar">
                <fileset dir="${basedir}/all/classes"/>
            </jar>
            <delete dir="${basedir}/all/classes"/>
        </target>
        
    </project>

    Start.java

    package com.dc.jetty.start;
    
    import java.io.File;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLClassLoader;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Start {
    
        private static void getJars(List<URL> urls, File cpdir)
                throws MalformedURLException {
    
            for (File f : cpdir.listFiles()) {
                if (f.isDirectory()) {
                    getJars(urls, f);
                }
                if (f.getName().endsWith(".jar")) {
                    URL url = f.toURI().toURL();
                    urls.add(url);
                }
            }
        }
    
        @SuppressWarnings("unchecked")
        public static void main(String[] args) {
            
            String classpath = System.getProperty("classpath");
            List<URL> urls = new ArrayList<URL>();
            File cpdir = new File(classpath);
            if (!cpdir.exists() || !cpdir.isDirectory()) {
                System.err.println("Please set system property "classpath" properly");
            } else {
                try {
                    getJars(urls, cpdir);
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
            }
            URL[] urlArray = urls.toArray(new URL[0]);
            URLClassLoader cl = new URLClassLoader(urlArray);
            Thread.currentThread().setContextClassLoader(cl);
            try {
                Class clz = Class.forName("com.dc.jetty.start.StartServer", false, cl);
                Method method =  clz.getDeclaredMethod("getInstance");
                method.setAccessible(true);
                Object instance = method.invoke(clz);
                Method m = clz.getDeclaredMethod("start");
                m.invoke(instance);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SecurityException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    
    }

    StartServer.java

    package com.dc.jetty.start;
    
    import org.eclipse.jetty.server.Server;
    import org.eclipse.jetty.util.thread.QueuedThreadPool;
    import org.eclipse.jetty.webapp.WebAppContext;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.dc.jetty.util.ConfigUtil;
    
    public class StartServer {
        
        private static StartServer instance = null;
        
        private StartServer() {
            
        }
        
        public static StartServer getInstance() {
            if (instance == null) {
                instance = new StartServer();
            }
            return instance;
        }
        
        public void start() {
            ConfigUtil.getInstance().getProperty("");
            Server server = new Server(Integer.valueOf(ConfigUtil.getInstance().getProperty("port")));
            
            WebAppContext webapp = new WebAppContext();
            webapp.setContextPath(ConfigUtil.getInstance().getProperty("contextPath"));
            webapp.setResourceBase(ConfigUtil.getInstance().getProperty("resourceBase"));
            webapp.setDescriptor(ConfigUtil.getInstance().getProperty("descriptor"));
            webapp.setParentLoaderPriority(true);
            webapp.setClassLoader(Thread.currentThread().getContextClassLoader());
            
            server.setHandler(webapp);
            QueuedThreadPool pool = new QueuedThreadPool();
            pool.setMaxThreads(Integer.valueOf(ConfigUtil.getInstance().getProperty("maxThread")));
            pool.setMinThreads(Integer.valueOf(ConfigUtil.getInstance().getProperty("minThread")));
            pool.setName("RestServer");
            server.setThreadPool(pool);
            try {
                server.start();
            } catch (Exception e) {
                e.printStackTrace();
            }
            Logger logger = LoggerFactory.getLogger(StartServer.class);
            logger.info("server starts");
            
            
        }
        
        public static void main(String[] args) {
            StartServer.getInstance().start();
        }
    
    }

    ConfigUtil.java

    package com.dc.jetty.util;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URL;
    import java.util.Properties;
    
    public class ConfigUtil {
    
        private static ConfigUtil instance = null;
        private Properties properties = null;
    
        private ConfigUtil() {
    
        }
    
        public static ConfigUtil getInstance() {
            if (instance == null) {
                instance = new ConfigUtil();
            }
            return instance;
        }
    
        public void load() {
            if (properties == null) {
                properties = new Properties();
                InputStream input = null;
                try {
                    URL url = ConfigUtil.class.getClassLoader().getResource(
                            "config.properties");
                    if (url == null) {
                        throw new FileNotFoundException(
                                "config.properties not found!");
                    }
                    input = new FileInputStream(url.getPath());
                    // input = new FileInputStream(
                    // "E:\paas\01工作库\09-代码\trunks\PaaS_NewFeatureLine\Code\OAuth\configs\oauth_conf\config.properties");
                    properties.load(input);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        public void reload() {
            properties = new Properties();
            InputStream input = null;
            try {
                URL url = ConfigUtil.class.getClassLoader().getResource(
                        "config.properties");
                if (url == null) {
                    throw new FileNotFoundException("config.properties not found!");
                }
                input = new FileInputStream(url.getPath());
                properties.load(input);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public String getProperty(String name) {
            if (properties == null) {
                load();
            }
            return properties.getProperty(name);
        }
    
        public static void main(String[] args) {
            System.out.println(ConfigUtil.getInstance().getProperty("port"));
        }
    
    }

    ServiceBeanContext.java

    package com.dc.multiwrite.util;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class ServiceBeanContext {
    
        private static final Logger log = LoggerFactory
                .getLogger(ServiceBeanContext.class);
    
        private static ServiceBeanContext context = null;
    
        private static ApplicationContext ctx = null;
    
        private ServiceBeanContext() {
    
        }
    
        public static ServiceBeanContext getInstance() {
            if (context == null) {
                synchronized (ServiceBeanContext.class) {
                    if (context == null) {
                        context = new ServiceBeanContext();
                    }
                }
            }
            return context;
        }
    
        public void loadContext(String path) {
            try {
                ctx = new ClassPathXmlApplicationContext(path);
            } catch (Exception e) {
                e.printStackTrace();
                log.error(e.getMessage(), e);
            }
        }
    
        public Object getBean(String bean) {
            return ctx.getBean(bean);
        }
    }

    DispatcherServlet.java

    package com.dc.multiwrite.servlet;
    
    import javax.servlet.ServletConfig;
    import javax.servlet.http.HttpServlet;
    
    import com.dc.multiwrite.util.ServiceBeanContext;
    
    public class DispatcherServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        public void init(ServletConfig config) {
            ServiceBeanContext.getInstance().loadContext("applicationContext.xml");
        }
    }

    applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                            http://www.springframework.org/schema/context
                            http://www.springframework.org/schema/context/spring-context-3.0.xsd
                            http://www.springframework.org/schema/aop
                            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
                            http://www.springframework.org/schema/tx
                            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
    
        <context:property-placeholder location="classpath*:jdbc.properties" />
    
        <!-- proxool连接池 -->
        <bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
            <property name="driver">
                <value>${jdbc.driverClassName}</value>
            </property>
            <property name="driverUrl">
                <value>${jdbc.url}</value>
            </property>
            <property name="user" value="${jdbc.username}" />
            <property name="password" value="${jdbc.password}" />
            <property name="alias" value="Pool_dbname" />
            <property name="maximumActiveTime" value="600000" />
            <property name="prototypeCount" value="0" />
            <property name="maximumConnectionCount" value="50" />
            <property name="minimumConnectionCount" value="2" />
            <property name="simultaneousBuildThrottle" value="50" />
            <property name="houseKeepingTestSql" value="select CURRENT_DATE" />
        </bean>
    
        <!-- mybatis 配置 -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="configLocation" value="classpath:${jdbc.configLocation}" />
        </bean>
        
        <bean id="sqlMapClient"
            class="com.dc.multiwrite.dao.SqlMapClientTemplate">
            <property name="sqlSession" ref="sqlSession" />
        </bean>
    
        <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
            <constructor-arg index="0" ref="sqlSessionFactory" />
        </bean>
    
        <!-- 事务管理器 -->
        <bean id="transactionmanager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
    
        <!-- 方法事务参数 -->
        <tx:advice id="serviceAdvice" transaction-manager="transactionmanager">
            <tx:attributes>
                <tx:method name="updateAppScalableStatus" propagation="REQUIRES_NEW"
                    isolation="READ_UNCOMMITTED" rollback-for="Exception" />
                <tx:method name="updateDefaultProtocol" propagation="REQUIRES_NEW"
                    isolation="READ_UNCOMMITTED" rollback-for="Exception" />
                <tx:method name="saveProtocol" propagation="REQUIRES_NEW"
                    isolation="READ_UNCOMMITTED" rollback-for="Exception" />
                <tx:method name="saveNewNode" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception" />
                <tx:method name="run*" propagation="REQUIRED" rollback-for="Exception" />
                <tx:method name="save*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="saveUpgrade" propagation="SUPPORTS"
                    isolation="READ_COMMITTED" rollback-for="Exception" />
                <tx:method name="update*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception" />
                <tx:method name="start*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="stop*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="destroy*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="deploy*" propagation="REQUIRED" isolation="READ_COMMITTED"
                    rollback-for="Exception" />
                <tx:method name="reapply" propagation="REQUIRED" isolation="READ_COMMITTED"
                    rollback-for="Exception" />
                <tx:method name="redeploy*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="isolate*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="return*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="unisolate*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="*"/>
            </tx:attributes>
        </tx:advice>
    
        <!-- 配置切面 -->
        <aop:config proxy-target-class="true">
            <aop:pointcut id="servicePointcut"
                expression="execution(* com.dc.multiwrite.service.impl.*.*(..))" />
            <aop:advisor pointcut-ref="servicePointcut" advice-ref="serviceAdvice" />
        </aop:config>
    
        <context:component-scan
            base-package="com.dc.multiwrite.dao.impl, com.dc.multiwrite.service.impl" />
    
    </beans>

    jdbc.properties

    #oracle
    #jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
    #jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:PAAS
    #jdbc.username=PAAS
    #jdbc.password=PAAS
    #jdbc.configLocation=sql-map-oracle-config.xml
    
    #mysql
    jdbc.driverClassName=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://10.126.253.38:3306/test_guojwe?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
    jdbc.username=root
    jdbc.password=root
    jdbc.configLocation=sql-map-mysql-config.xml

    sql-map-mysql-config.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "ibatis-3-config.dtd">
    
    <configuration>
        
        <settings>
            <setting name="lazyLoadingEnabled" value="false" />
            <setting name="cacheEnabled" value="true"/>
        </settings>
        
        <mappers>
            <mapper resource="db/mapping/mysql/test.xml"/>
        </mappers>
        
    </configuration>

    test.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "ibatis-3-mapper.dtd">
    <mapper namespace="test">
    
        <insert id="insert" parameterType="java.util.List">
            insert into test(id, count)
            values
            <foreach collection="list" item="item" index="index" separator=",">
                (#{item.id}, #{item.count})
            </foreach>
        </insert>
        
        <update id="update" parameterType="java.util.List">
            <foreach collection="list" item="item" index="index" separator="">
                update test
                <set>
                    count = #{item.count}
                </set>
                where id = #{item.id};
            </foreach>
        </update>
        
        <delete id="delete" parameterType="java.util.List">
            delete from test
            where id in
            <foreach collection="list" item="item" index="index" separator="," open ="(" close=")">
                #{item.id}
            </foreach>
        </delete>
        
    </mapper>

    ExecutorServicePool.java

    package com.dc.multiwrite.util;
    
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    import java.util.concurrent.ThreadFactory;
    
    public class ExecutorServicePool {
        
        private static ExecutorServicePool pool;
    
        private transient ExecutorService services;
        
        private ExecutorServicePool(){
            int size = Integer.parseInt(ConfigUtil.getInstance().getProperty("multiwrite.threadPoolSize"));
            services = Executors.newFixedThreadPool( size, new ThreadFactory() {
                private static final String name = "multiwrite-thread";
                public Thread newThread(Runnable r) {
                    return new Thread(r, name);
                }
            });
        }
        
        public static ExecutorServicePool getInstance(){
            if( pool == null ){
                synchronized( ExecutorServicePool.class ){
                    if( pool == null ){
                        pool = new ExecutorServicePool();
                    }
                }
            }
            return pool;
        }
    
    
        public ExecutorService getServices() {
            return services;
        }
        
        public <T> Future<T> submit( Callable<T> task ){
            return services.submit( task );
        }
        
        public Future<?> submit( Runnable task ){
            return services.submit( task );
        }
        
        public void execute( Runnable command ){
            services.execute( command );
        }
    }
  • 相关阅读:
    SpringMVC(三) RESTful架构和文件上传下载
    SpringMVC(二) 参数绑定 与 JSON
    SpringMVC(一) 简单代码编写,注解,重定向与转发
    Spring深入浅出(三)XML方式以及注解的方式操作IOC
    Markdown 语法整理
    前端开发中一些好用的chrome插件汇总
    vue-cli项目配置mock数据
    HTTP协议详解
    JS判断IE6/IE7/IE8系列的写法
    ES6新特性(转)
  • 原文地址:https://www.cnblogs.com/sayaoailun/p/4923911.html
Copyright © 2011-2022 走看看