<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>绿色记忆 &#187; Scheduler</title>
	<atom:link href="https://blog.gmem.cc/tag/scheduler/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.gmem.cc</link>
	<description></description>
	<lastBuildDate>Mon, 06 Apr 2026 12:46:48 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.9.14</generator>
	<item>
		<title>Spring配置：集成Hibernate、JacksonJSON、AspectJ等框架</title>
		<link>https://blog.gmem.cc/spring-config-with-hibernate-jacksonjson-aspectj</link>
		<comments>https://blog.gmem.cc/spring-config-with-hibernate-jacksonjson-aspectj#comments</comments>
		<pubDate>Mon, 26 Nov 2012 08:39:24 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[AspectJ]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[JacksonJSON]]></category>
		<category><![CDATA[Log4jdbc]]></category>
		<category><![CDATA[Scheduler]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[配置文件]]></category>

		<guid isPermaLink="false">http://blog.gmem.cc/?p=1110</guid>
		<description><![CDATA[<p>本文提及的该套配置文件，覆盖了JavaEE项目开发的最常见需求，包括：依赖注入、事务控制、AOP、任务调度、缓存、MVC框架等方面的内容。 容易改变的配置项独立到属性文件中： [crayon-69d661a56e55b765450487/] Spring配置文件部分： [crayon-69d661a56e560749549519/] Spring MVC配置文件部分： [crayon-69d661a56e566831346786/] ehcache配置部分： [crayon-69d661a56e569244651573/] Web.xml配置（使用了Spring的JavaConfig）： [crayon-69d661a56e56b149354680/] Java Config类： [crayon-69d661a56e56e304536832/] [crayon-69d661a56e570083220247/] Maven依赖包列表： [crayon-69d661a56e572283360326/] Maven插件配置（支持AspectJ）： [crayon-69d661a56e576722575709/]</p>
<p>The post <a rel="nofollow" href="https://blog.gmem.cc/spring-config-with-hibernate-jacksonjson-aspectj">Spring配置：集成Hibernate、JacksonJSON、AspectJ等框架</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="wri_content_clear_both">本文提及的该套配置文件，覆盖了JavaEE项目开发的最常见需求，包括：依赖注入、事务控制、AOP、任务调度、缓存、MVC框架等方面的内容。<br />
容易改变的配置项独立到属性文件中：<br />
<pre class="crayon-plain-tag">hibernateDialect=org.hibernate.dialect.MySQL5Dialect
#启用了log4jdbc支持
jdbcDriver=net.sf.log4jdbc.DriverSpy
jdbcDriverUrl=jdbc:log4jdbc:mysql://192.168.0.201:3306/initpemsdb1.1.1
jdbcUserName=root
jdbcPassword=root</pre><br />
Spring配置文件部分：<br />
<pre class="crayon-plain-tag">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;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:context="http://www.springframework.org/schema/context" 
    xmlns:util="http://www.springframework.org/schema/util" 
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:task="http://www.springframework.org/schema/task" 
    xmlns:cache="http://www.springframework.org/schema/cache"
    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.1.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-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/task  http://www.springframework.org/schema/task/spring-task-3.0.xsd
        http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd
    "&gt;
    &lt;!-- 定义属性，在后面的配置中可以使用#{appCfg.xxx}引用 --&gt;
    &lt;util:properties id="appCfg" location="classpath:applicationConfig.properties" /&gt;
    &lt;!-- 包扫描配置 --&gt;
    &lt;context:component-scan base-package="cc.gmem.demo"&gt;
        &lt;!-- 去除Java Config类 --&gt;
        &lt;context:exclude-filter type="annotation" expression="org.springframework.context.annotation.Configuration" /&gt;
        &lt;!-- 去除Spring MVC类 --&gt;
        &lt;context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /&gt;
        &lt;!-- 匹配AspectJ Pattern的类被去除 --&gt;
        &lt;context:exclude-filter type="aspectj" expression="cc.gmem.demo.aop.web.*" /&gt;
    &lt;/context:component-scan&gt;
    &lt;!-- 启用注解支持 --&gt;
    &lt;context:annotation-config /&gt;
    &lt;!-- 支持@Configurable注解 --&gt;
    &lt;context:spring-configured /&gt;
    &lt;!--  启用注解方式的事务：基于AspectJ织入 --&gt;
    &lt;tx:annotation-driven transaction-manager="txManager" mode="aspectj" /&gt;
    &lt;!--  启用注解方式的缓存配置：基于AspectJ织入 --&gt;
    &lt;cache:annotation-driven cache-manager="cacheManager" mode="aspectj" /&gt;
    &lt;!--  启用注解方式的任务执行(例如@Async)：基于AspectJ织入 --&gt;
    &lt;task:annotation-driven executor="taskExecutor" mode="aspectj" /&gt;
    
    &lt;!--  任务调度器配置，pool-size为线程池大小，限制了同时最多被调度的任务 --&gt;
    &lt;task:scheduler pool-size="100" id="scheduler" /&gt;
    &lt;!-- 任务计划列表，支持固定频率、固定延迟、Cron表达式等 --&gt;
    &lt;task:scheduled-tasks scheduler="scheduler"&gt;
        &lt;task:scheduled fixed-rate="120000" method="run" ref="hibernateStatisticsMonitor" /&gt;
    &lt;/task:scheduled-tasks&gt;
    &lt;!-- 任务执行器，用于异步执行任务 --&gt;
    &lt;task:executor id="taskExecutor" keep-alive="3600" pool-size="10-100" queue-capacity="10000" rejection-policy="CALLER_RUNS" /&gt;
    &lt;!-- 引入其它Spring配置文件 --&gt;
    &lt;import resource="report-and-etl.xml" /&gt;  
    &lt;!-- Hibernate配置  --&gt;
    &lt;bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource"&gt;
        &lt;property name="alias" value="connectionPool" /&gt;
        &lt;property name="driver" value="#{appCfg.jdbcDriver}" /&gt;
        &lt;property name="driverUrl" value="#{appCfg.jdbcDriverUrl}" /&gt;
        &lt;property name="user" value="#{appCfg.jdbcUserName}" /&gt;
        &lt;property name="password" value="#{appCfg.jdbcPassword}" /&gt;
        &lt;property name="statistics" value="10s" /&gt;
        &lt;property name="minimumConnectionCount" value="10" /&gt;
        &lt;property name="maximumConnectionCount" value="100" /&gt;
        &lt;property name="simultaneousBuildThrottle" value="10" /&gt;
        &lt;property name="maximumActiveTime" value="3600000" /&gt;
    &lt;/bean&gt;
    &lt;bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" autowire="byName" /&gt;
    &lt;bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor" lazy-init="true" /&gt;
    &lt;bean id="sessionFactory" p:dataSource-ref="dataSource" class="cc.gmem.demo.hibernate.AnnotationSessionFactoryBean" depends-on="appCfg" &gt;
        &lt;property name="packagesToScan"&gt;
            &lt;list&gt;
                &lt;value&gt;cc.gmem.demo.**.domain&lt;/value&gt;
            &lt;/list&gt;
        &lt;/property&gt;
        &lt;property name="hibernateProperties"&gt;
            &lt;value&gt;
                hibernate.dialect=#{appCfg.hibernateDialect}
                hibernate.jdbc.batch_size=30
                hibernate.show_sql=false
                hibernate.format_sql=true
                hibernate.generate_statistics=true
                hibernate.transaction.factory_class=org.hibernate.transaction.JDBCTransactionFactory
                hibernate.current_session_context_class=org.springframework.orm.hibernate3.SpringSessionContext
                hibernate.query.factory_class=org.hibernate.hql.ast.ASTQueryTranslatorFactory
                hibernate.hbm2ddl.auto=update
                #启用二级缓存
                hibernate.cache.use_second_level_cache=true
                hibernate.cache.use_query_cache=true
                hibernate.cache.region.factory_class=org.hibernate.cache.SingletonEhCacheRegionFactory
            &lt;/value&gt;
        &lt;/property&gt;
    &lt;/bean&gt;
    &lt;!-- Spring缓存配置 --&gt;
    &lt;bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"&gt;
        &lt;property name="cacheManager" ref="ehcache" /&gt;
    &lt;/bean&gt;
    &lt;bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"&gt;
        &lt;property name="configLocation"&gt;
            &lt;value&gt;classpath:ehcache.xml&lt;/value&gt;
        &lt;/property&gt;
        &lt;property name="shared" value="true" /&gt;
    &lt;/bean&gt;
    &lt;bean id="hibernateStatisticsMonitor" class="cc.gmem.demo.hibernate.HibernateStatisticsMonitor" /&gt;
    &lt;bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" p:sessionFactory-ref="sessionFactory" /&gt;
    &lt;!-- Velocity引擎配置 --&gt;
    &lt;bean id="velocityEngine" class="org.apache.velocity.app.VelocityEngine"&gt;
        &lt;constructor-arg type="java.util.Properties"&gt;
            &lt;value&gt;
                &lt;![CDATA[
                #{T(org.apache.velocity.runtime.RuntimeConstants).RUNTIME_LOG_LOGSYSTEM_CLASS}=org.apache.velocity.runtime.log.Log4JLogChute
                runtime.log.logsystem.log4j.logger=velocityLogger
                #{T(org.apache.velocity.runtime.RuntimeConstants).INPUT_ENCODING}=UTF-8
                #{T(org.apache.velocity.runtime.RuntimeConstants).OUTPUT_ENCODING}=UTF-8
                #{T(org.apache.velocity.runtime.RuntimeConstants).VM_PERM_ALLOW_INLINE}=true
                #{T(org.apache.velocity.runtime.RuntimeConstants).RESOURCE_LOADER}=class
                #{T(org.apache.velocity.runtime.RuntimeConstants).PARSER_POOL_SIZE}=100
                class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
                ]]&gt;
            &lt;/value&gt;
        &lt;/constructor-arg&gt;
    &lt;/bean&gt;
    &lt;!--国际化支持--&gt;
    &lt;bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"&gt;
         &lt;property name="basenames"&gt;
             &lt;list&gt;
                 &lt;value&gt;classpath:message.gmemdemo&lt;/value&gt;
             &lt;/list&gt;
         &lt;/property&gt;
         &lt;property name="defaultEncoding" value="UTF-8" /&gt;
         &lt;property name="cacheSeconds" value="5" /&gt;
    &lt;/bean&gt;
    &lt;!--Jackson JSON --&gt;
    &lt;bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper" autowire="byType" /&gt;
    &lt;!-- Spring类型转换服务，特别是用于时间日期格式转换 --&gt;
    &lt;bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"&gt;
        &lt;property name="converters"&gt;
            &lt;set&gt;
                &lt;bean class="net.greenmemory.spring.converter.DateTimeConvertor"&gt;
                    &lt;constructor-arg&gt;
                        &lt;array&gt;
                            &lt;value&gt;yyyy-MM-dd&lt;/value&gt;
                            &lt;value&gt;yyyy-MM-dd HH:mm:ss&lt;/value&gt;
                            &lt;value&gt;yyyy-MM-dd HH:mm:ss.SSS&lt;/value&gt;
                       &lt;/array&gt;
                    &lt;/constructor-arg&gt;
                &lt;/bean&gt;
            &lt;/set&gt;
       &lt;/property&gt;
       &lt;property name="formatters"&gt;
           &lt;set&gt;
               &lt;bean class="org.springframework.format.datetime.DateFormatter"&gt;
                   &lt;constructor-arg&gt;
                       &lt;value&gt;yyyy-MM-dd&lt;/value&gt;
                   &lt;/constructor-arg&gt;
               &lt;/bean&gt;
           &lt;/set&gt;
       &lt;/property&gt;
       &lt;property name="formatterRegistrars"&gt;
           &lt;set&gt;
           &lt;/set&gt;
       &lt;/property&gt;
    &lt;/bean&gt;
&lt;/beans&gt;</pre><br />
Spring MVC配置文件部分：<br />
<pre class="crayon-plain-tag">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;beans 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
    "&gt;
    &lt;context:component-scan base-package="cc.gmem.demo.**.ctrl"&gt;
        &lt;context:exclude-filter type="annotation" expression="org.springframework.context.annotation.Configuration" /&gt;
    &lt;/context:component-scan&gt;
    &lt;context:component-scan base-package="cc.gmem.demo.aop.web" /&gt;

    &lt;context:annotation-config /&gt;

    &lt;mvc:annotation-driven&gt;
        &lt;mvc:message-converters&gt;
            &lt;bean class="org.springframework.http.converter.json.jacksonjson.MappingJackson2HttpMessageConverter"&gt;
                &lt;property name="objectMapper" ref="objectMapper" /&gt;
            &lt;/bean&gt;
        &lt;/mvc:message-converters&gt;
    &lt;/mvc:annotation-driven&gt;

    &lt;mvc:interceptors&gt;
        &lt;bean id="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor"&gt;
            &lt;property name="sessionFactory" ref="sessionFactory" /&gt;
        &lt;/bean&gt;
            &lt;mvc:interceptor&gt;     
            &lt;mvc:mapping path="/home/*" /&gt; 
            &lt;!-- 自定义MVC拦截器 --&gt;
            &lt;bean class="cc.gmem.demo.spring.LogonInterceptor" /&gt; 
        &lt;/mvc:interceptor&gt;  
        
    &lt;/mvc:interceptors&gt;

    &lt;bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"&gt;
        &lt;property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /&gt;
        &lt;property name="prefix" value="/WEB-INF/jsp/" /&gt;
        &lt;property name="suffix" value=".jsp" /&gt;
        &lt;property name="order" value="0" /&gt;
    &lt;/bean&gt;

    &lt;mvc:resources mapping="/css/**" location="/css/" /&gt;
    &lt;mvc:resources mapping="/icons/**" location="/icons/" /&gt;
    &lt;mvc:resources mapping="/images/**" location="/images/" /&gt;
    &lt;mvc:resources mapping="/themes/**" location="/themes/" /&gt;
    &lt;mvc:resources mapping="/js/**" location="/js/" /&gt;
&lt;/beans&gt;</pre><br />
ehcache配置部分：<br />
<pre class="crayon-plain-tag">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;ehcache&gt;
    &lt;diskStore path="D:/Temp/ehcache" /&gt;
    &lt;defaultCache eternal="false" /&gt;
    &lt;cache name="entityCache" eternal="false" maxElementsInMemory="1000" timeToIdleSeconds="120" timeToLiveSeconds="3600"
        overflowToDisk="true" memoryStoreEvictionPolicy="LFU" /&gt;
&lt;/ehcache&gt;</pre><br />
Web.xml配置（使用了Spring的JavaConfig）：<br />
<pre class="crayon-plain-tag">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&gt;
    &lt;context-param&gt;
        &lt;param-name&gt;contextClass&lt;/param-name&gt;
        &lt;param-value&gt;org.springframework.web.context.support.AnnotationConfigWebApplicationContext&lt;/param-value&gt;
    &lt;/context-param&gt;
    &lt;context-param&gt;
        &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;
        &lt;param-value&gt;cc.gmem.demo.spring.SpringBeanDefinitionRegistrar&lt;/param-value&gt;
    &lt;/context-param&gt;
    &lt;listener&gt;
        &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;
    &lt;/listener&gt;
    &lt;servlet&gt;
        &lt;servlet-name&gt;springmvc&lt;/servlet-name&gt;
        &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;
        &lt;init-param&gt;
            &lt;param-name&gt;contextClass&lt;/param-name&gt;
            &lt;param-value&gt;org.springframework.web.context.support.AnnotationConfigWebApplicationContext&lt;/param-value&gt;
        &lt;/init-param&gt;
        &lt;init-param&gt;
            &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;
            &lt;param-value&gt;cc.gmem.demo.spring.SpringMVCBeanDefinitionRegistrar&lt;/param-value&gt;
        &lt;/init-param&gt;
    &lt;/servlet&gt;
    &lt;servlet-mapping&gt;
        &lt;servlet-name&gt;springmvc&lt;/servlet-name&gt;
        &lt;url-pattern&gt;/&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;

    &lt;servlet-mapping&gt;
        &lt;servlet-name&gt;adminServlet&lt;/servlet-name&gt;
        &lt;url-pattern&gt;/proxool&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;

    &lt;session-config&gt;
        &lt;session-timeout&gt;60&lt;/session-timeout&gt;
    &lt;/session-config&gt;

    &lt;error-page&gt;
        &lt;error-code&gt;404&lt;/error-code&gt;
        &lt;location&gt;/WEB-INF/jsp/error-404.jsp&lt;/location&gt;
    &lt;/error-page&gt;
    &lt;error-page&gt;
        &lt;error-code&gt;401&lt;/error-code&gt;
        &lt;location&gt;/WEB-INF/jsp/error-401.jsp&lt;/location&gt;
    &lt;/error-page&gt;
    &lt;error-page&gt;
        &lt;error-code&gt;500&lt;/error-code&gt;
        &lt;location&gt;/WEB-INF/jsp/error-500.jsp&lt;/location&gt;
    &lt;/error-page&gt;
     &lt;welcome-file-list&gt;
        &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;
    &lt;/welcome-file-list&gt;
&lt;/web-app&gt;</pre><br />
Java Config类：<br />
<pre class="crayon-plain-tag">@Configuration
/* XML-based bean definitions */
@ImportResource ( "classpath:applicationContext.xml" )
public class SpringBeanDefinitionRegistrar
{

    /* Auto injected spring context */
    @SuppressWarnings ( "unused" )
    @Inject
    private ApplicationContext applicationContext;

    /* Programmatic bean definition */
    @Bean ( name = "helper" )
    public Helper helper()
    {
        Helper helper = new Helper();
        return helper;
    }

}</pre><br />
<pre class="crayon-plain-tag">@Configuration
@ImportResource ( "classpath:spring-mvc.xml" )
public class SpringMVCBeanDefinitionRegistrar
{

}</pre><br />
Maven依赖包列表：<br />
<pre class="crayon-plain-tag">&lt;properties&gt;
    &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;
    &lt;spring.version&gt;3.1.2.RELEASE&lt;/spring.version&gt;
    &lt;hibernate.version&gt;3.6.10.Mod&lt;/hibernate.version&gt;
    &lt;aspectj.version&gt;1.6.11&lt;/aspectj.version&gt;
    &lt;jackson.version&gt;2.0.4&lt;/jackson.version&gt;
&lt;/properties&gt;
&lt;dependencies&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.springframework&lt;/groupId&gt;
        &lt;artifactId&gt;spring-core&lt;/artifactId&gt;
        &lt;version&gt;${spring.version}&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.springframework&lt;/groupId&gt;
        &lt;artifactId&gt;spring-jdbc&lt;/artifactId&gt;
        &lt;version&gt;${spring.version}&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.springframework&lt;/groupId&gt;
        &lt;artifactId&gt;spring-beans&lt;/artifactId&gt;
        &lt;version&gt;${spring.version}&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.springframework&lt;/groupId&gt;
        &lt;artifactId&gt;spring-webmvc&lt;/artifactId&gt;
        &lt;version&gt;${spring.version}&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;org.springframework&lt;/groupId&gt;
        &lt;artifactId&gt;spring-orm&lt;/artifactId&gt;
        &lt;version&gt;${spring.version}&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.springframework&lt;/groupId&gt;
        &lt;artifactId&gt;spring-test&lt;/artifactId&gt;
        &lt;version&gt;${spring.version}&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;org.hibernate&lt;/groupId&gt;
        &lt;artifactId&gt;hibernate-core&lt;/artifactId&gt;
        &lt;version&gt;${hibernate.version}&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;org.aspectj&lt;/groupId&gt;
        &lt;artifactId&gt;aspectjweaver&lt;/artifactId&gt;
        &lt;version&gt;${aspectj.version}&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.aspectj&lt;/groupId&gt;
        &lt;artifactId&gt;aspectjrt&lt;/artifactId&gt;
        &lt;version&gt;${aspectj.version}&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt;
        &lt;artifactId&gt;jackson-core&lt;/artifactId&gt;
        &lt;version&gt;${jackson.version}&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt;
        &lt;artifactId&gt;jackson-databind&lt;/artifactId&gt;
        &lt;version&gt;${jackson.version}&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt;
        &lt;artifactId&gt;jackson-annotations&lt;/artifactId&gt;
        &lt;version&gt;${jackson.version}&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;javax.servlet&lt;/groupId&gt;
        &lt;artifactId&gt;servlet-api&lt;/artifactId&gt;
        &lt;version&gt;2.4&lt;/version&gt;
        &lt;scope&gt;provided&lt;/scope&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;javax.servlet.jsp&lt;/groupId&gt;
        &lt;artifactId&gt;jsp-api&lt;/artifactId&gt;
        &lt;version&gt;2.0&lt;/version&gt;
        &lt;scope&gt;provided&lt;/scope&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;javax.servlet&lt;/groupId&gt;
        &lt;artifactId&gt;jstl&lt;/artifactId&gt;
        &lt;version&gt;1.2&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;taglibs&lt;/groupId&gt;
        &lt;artifactId&gt;standard&lt;/artifactId&gt;
        &lt;version&gt;1.1.2&lt;/version&gt;
        &lt;scope&gt;provided&lt;/scope&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;javax.el&lt;/groupId&gt;
        &lt;artifactId&gt;el-api&lt;/artifactId&gt;
        &lt;version&gt;2.2&lt;/version&gt;
        &lt;scope&gt;provided&lt;/scope&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;proxool&lt;/groupId&gt;
        &lt;artifactId&gt;proxool&lt;/artifactId&gt;
        &lt;version&gt;0.9.1&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;org.javassist&lt;/groupId&gt;
        &lt;artifactId&gt;javassist&lt;/artifactId&gt;
        &lt;version&gt;3.15.0-GA&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;net.sf.log4jdbc&lt;/groupId&gt;
        &lt;artifactId&gt;log4jdbc3&lt;/artifactId&gt;
        &lt;version&gt;1.2-ext-3&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;com.sqlinform&lt;/groupId&gt;
        &lt;artifactId&gt;sqlinform&lt;/artifactId&gt;
        &lt;version&gt;0.0.1&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;javax.annotation&lt;/groupId&gt;
        &lt;artifactId&gt;jsr250-api&lt;/artifactId&gt;
        &lt;version&gt;1.0&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;javax.inject&lt;/groupId&gt;
        &lt;artifactId&gt;javax.inject&lt;/artifactId&gt;
        &lt;version&gt;1&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;joda-time&lt;/groupId&gt;
        &lt;artifactId&gt;joda-time&lt;/artifactId&gt;
        &lt;version&gt;2.1&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;cglib&lt;/groupId&gt;
        &lt;artifactId&gt;cglib&lt;/artifactId&gt;
        &lt;version&gt;2.2.2&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;org.apache.poi&lt;/groupId&gt;
        &lt;artifactId&gt;poi&lt;/artifactId&gt;
        &lt;version&gt;3.9&lt;/version&gt;
    &lt;/dependency&gt;
    
    &lt;dependency&gt;
        &lt;groupId&gt;opensymphony&lt;/groupId&gt;
        &lt;artifactId&gt;quartz-all&lt;/artifactId&gt;
        &lt;version&gt;1.6.3&lt;/version&gt;
    &lt;/dependency&gt;
&lt;/dependencies&gt;</pre><br />
Maven插件配置（支持AspectJ）：<br />
<pre class="crayon-plain-tag">&lt;plugin&gt;
    &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
    &lt;artifactId&gt;aspectj-maven-plugin&lt;/artifactId&gt;
    &lt;version&gt;1.4&lt;/version&gt;
    &lt;executions&gt;
        &lt;execution&gt;
            &lt;id&gt;compile&lt;/id&gt;
            &lt;configuration&gt;
                &lt;XnoInline&gt;true&lt;/XnoInline&gt;
                &lt;forceAjcCompile&gt;true&lt;/forceAjcCompile&gt;
                &lt;showWeaveInfo&gt;true&lt;/showWeaveInfo&gt;
                &lt;source&gt;1.5&lt;/source&gt;
                &lt;target&gt;1.5&lt;/target&gt;
                &lt;encoding&gt;UTF-8&lt;/encoding&gt;
                &lt;verbose&gt;true&lt;/verbose&gt;
                &lt;outxml&gt;true&lt;/outxml&gt;
                &lt;aspectLibraries&gt;
                    &lt;aspectLibrary&gt;
                        &lt;groupId&gt;org.springframework&lt;/groupId&gt;
                        &lt;artifactId&gt;spring-aspects&lt;/artifactId&gt;
                    &lt;/aspectLibrary&gt;
                &lt;/aspectLibraries&gt;
            &lt;/configuration&gt;
            &lt;goals&gt;
                &lt;goal&gt;compile&lt;/goal&gt;
            &lt;/goals&gt;
        &lt;/execution&gt;
    &lt;/executions&gt;
&lt;/plugin&gt;</pre>
</div><p>The post <a rel="nofollow" href="https://blog.gmem.cc/spring-config-with-hibernate-jacksonjson-aspectj">Spring配置：集成Hibernate、JacksonJSON、AspectJ等框架</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.gmem.cc/spring-config-with-hibernate-jacksonjson-aspectj/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring与Quartz的任务调度比较</title>
		<link>https://blog.gmem.cc/comparision-of-spring-task-scheduler-and-quartz</link>
		<comments>https://blog.gmem.cc/comparision-of-spring-task-scheduler-and-quartz#comments</comments>
		<pubDate>Sat, 09 Apr 2011 06:01:14 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Cron]]></category>
		<category><![CDATA[Quartz]]></category>
		<category><![CDATA[Scheduler]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://blog.gmem.cc/?p=1518</guid>
		<description><![CDATA[<p>任务调度代码比较 Spring 2.x 任务调度示例 [crayon-69d661a56ebfe444693618/] Spring 3.x 任务调度示例 配置文件方式 [crayon-69d661a56ec02806566114/] 注解方式 如果使用该方式，必须声明task:annotation-driven，如果不使用aspectj，则mode应设置为proxy。 [crayon-69d661a56ec05129365362/] 在Service类中，使用@Scheduled来标注需要调度的方法 [crayon-69d661a56ec07966669077/] Quartz任务调度示例 [crayon-69d661a56ec09147392315/] 特性比较 比较项 Spring2.x Spring3.x Quartz <a class="read-more" href="https://blog.gmem.cc/comparision-of-spring-task-scheduler-and-quartz">[...]</a></p>
<p>The post <a rel="nofollow" href="https://blog.gmem.cc/comparision-of-spring-task-scheduler-and-quartz">Spring与Quartz的任务调度比较</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="wri_content_clear_both"><div class="blog_h2"><span class="graybg">任务调度代码比较</span></div>
<div class="blog_h3"><span class="graybg">Spring 2.x 任务调度示例</span></div>
<pre class="crayon-plain-tag">&lt;bean id="demoJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&gt;
    &lt;!-- 目标Bean --&gt;
    &lt;property name="targetObject"&gt;
        &lt;bean class="cc.gmem.demo.DemoService" /&gt;
    &lt;/property&gt;
    &lt;!-- 目标方法 --&gt;
    &lt;property name="targetMethod" value="doStuff" /&gt;
    &lt;!-- 防止并发执行 --&gt;
    &lt;property name="concurrent" value="false" /&gt;
&lt;/bean&gt;
&lt;!-- 简单触发器 --&gt;
&lt;bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"&gt;
    &lt;property name="jobDetail" ref="demoJob" /&gt;
    &lt;!-- 启动后，调度开始的时间 --&gt;
    &lt;property name="startDelay" value="0" /&gt;
    &lt;!-- 每隔2000ms调度一次 --&gt;
    &lt;property name="repeatInterval" value="2000" /&gt;
&lt;/bean&gt;
&lt;!-- Cron触发器 --&gt;
&lt;bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"&gt;
    &lt;property name="jobDetail" ref="demoJob" /&gt;
    &lt;property name="cronExpression" value="15 0/2 * * * ?" /&gt;
&lt;/bean&gt;
&lt;!-- 调度工厂Bean --&gt;
&lt;bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt;
    &lt;property name="triggers"&gt;
        &lt;list&gt;
            &lt;ref bean="simpleTrigger" /&gt;
            &lt;ref bean="cronTrigger" /&gt;
        &lt;/list&gt;
    &lt;/property&gt;
&lt;/bean&gt;</pre>
<div class="blog_h3"><span class="graybg">Spring 3.x 任务调度示例</span></div>
<strong>配置文件方式</strong><br />
<pre class="crayon-plain-tag">&lt;!--  任务调度器配置，pool-size为线程池大小，限制了同时最多被调度的任务 --&gt;
&lt;task:scheduler pool-size="100" id="scheduler" /&gt;
&lt;!-- 任务计划列表，支持固定频率、固定延迟、Cron表达式等 --&gt;
&lt;task:scheduled-tasks scheduler="scheduler"&gt;
    &lt;task:scheduled fixed-rate="120000" method="doStuff" ref="demoService" /&gt;
    &lt;task:scheduled cron="15 0/2 * * * ?" method="doStuff" ref="demoService" /&gt;
&lt;/task:scheduled-tasks&gt;</pre><br />
<strong>注解方式</strong><br />
如果使用该方式，必须声明task:annotation-driven，如果不使用aspectj，则mode应设置为proxy。<br />
<pre class="crayon-plain-tag">&lt;task:annotation-driven scheduler="scheduler" executor="taskExecutor" mode="aspectj" /&gt;
&lt;task:scheduler pool-size="100" id="scheduler" /</pre><br />
在Service类中，使用@Scheduled来标注需要调度的方法<br />
<pre class="crayon-plain-tag">package cc.gmem.demo;
@Component("demoService") 
public class DemoService(){
    @Scheduled(cron = "15 0/2 * * * ?")  
    public void doStuff(){

    }
}</pre>
<div class="blog_h3"><span class="graybg">Quartz任务调度示例</span></div>
<pre class="crayon-plain-tag">import static org.quartz.JobBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;
import static org.quartz.CronScheduleBuilder.*;

StdSchedulerFactory schedulerFactory = new StdSchedulerFactory();
Properties pros = new Properties();
pros.setProperty( "org.quartz.scheduler.instanceName", "MyScheduler" );
pros.setProperty( "org.quartz.threadPool.threadCount", "10" );//调度器线程数
pros.setProperty( "org.quartz.jobStore.class", "org.quartz.simpl.RAMJobStore" );//任务存储，可以用于持久化
schedulerFactory.initialize( pros );
Scheduler scheduler = schedulerFactory.getScheduler();
//启动调度器
scheduler.start();
JobDetail job = newJob( helloWorldJob.class ).build();
//简单触发器
Trigger trigger =  newTrigger().startNow().withSchedule( simpleSchedule().withIntervalInSeconds( 1 ).repeatForever() ).build();
//Cron表达式触发器
trigger = newTrigger().startNow().withSchedule( cronSchedule( "15 0/2 * * * ?" )).build();
scheduler.scheduleJob( job, trigger );

TimeUnit.SECONDS.sleep( 1800 );
//关闭调度器
scheduler.shutdown();</pre>
<div class="blog_h2"><span class="graybg">特性比较</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 100px; text-align: center;">比较项</td>
<td style="text-align: center;">Spring2.x</td>
<td style="text-align: center;">Spring3.x</td>
<td style="text-align: center;">Quartz</td>
</tr>
</thead>
<tbody>
<tr>
<td>优缺点</td>
<td>比较繁琐，除非是老项目维护的需要，不建议使用</td>
<td>配置简单，对注解、配置文件方式的支持均较好</td>
<td>比较强大，支持任务状态的持久化</td>
</tr>
<tr>
<td>重叠执行(overlap)</td>
<td>JobDetail中设置concurrent属性可以防止重叠执行</td>
<td>默认是不允许重叠执行的，如果需要，在目标方法上添加@Async注解</td>
<td>在Job的实现类上添加：@DisallowConcurrentExecution可以防止重叠执行</td>
</tr>
</tbody>
</table>
</div><p>The post <a rel="nofollow" href="https://blog.gmem.cc/comparision-of-spring-task-scheduler-and-quartz">Spring与Quartz的任务调度比较</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.gmem.cc/comparision-of-spring-task-scheduler-and-quartz/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
