`

Spring中配置Qaurtz时的singlton问题

阅读更多

        上一篇中用TimerTask做了个简单的实验, 功能达到了,但为了支持更灵活的schedule配置,决定要用Spring中的Qaurtz.

        但写完运行后发现一个性能上的小问题: 配置的任务没运行一次时,JVM都要新实例化一个对象. 我们知道JVM每实例化一个对象是要花销不小的资源,怎么来让task只有一个对象呢?

        能否用singlton来达到单例的效果呢?

    有些麻烦, spring的配置文件中是这样写的:
        <bean id="dailyRantEmailJob" class="org.springframework.scheduling.quartz.JobDetailBean" >
              <property name="jobClass"   value="spring.DailyRantEmailJob" />
        </bean>
    也就是说它内部是用反射的方式来新建一个对象的.

    而singlton只能写在某一个bean的配置上, 它管不了spring/quartz内部反射的事.

    这怎么办?

    ..................

    后来看MethodInvokingJobDetailFactoryBean方法,实然觉得可以把这两种方式结合起来.

    这样就有了下面的解决方案:

    <bean id="jobBean" class = "spring.DailyRantEmailJob "/>

    <bean id="dailyRantEmailJob"          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
          <property name="targetObject" ref="jobBean"/>
          <property name="targetMethod" value="run" /> <!--假定我们通过jobBean里的run方法来执行真正的工作-->
    </bean>

        配置好后运行, 不错! 单例效果达到了.

1
0
分享到:
评论

相关推荐

    factory&singlton pattern

    设计模式是解决常见问题的成熟方案,它们为软件开发提供了良好的可扩展性和可维护性。 **工厂模式(Factory Pattern)** 工厂模式是一种创建型设计模式,它的主要目标是提供一个接口,用于创建某一类对象,而不需要...

    node-singleton-event:由singlton事件发射器类驱动的全局事件总线

    由singlton事件发射器类驱动的全局事件总线。 使用此模块可以将某些东西钩在其他对象中。 安装 npm install node-singleton-event -save 如何使用 在要与另一个文件进行通信的每个文件中都需要它。 说些什么: ...

    C++开发在IOS环境下运行的LRUCache缓存功能

    为了解决这个问题,代码中引入了一个简单的读写互斥锁(rwlock)结构。`LOCK`和`UNLOCK`宏用于获取和释放锁,`rwlock_rlock`和`rwlock_wlock`分别用于获取读锁和写锁。这样可以确保在设置数据时,同一时间只有一个...

    Remoting实例

    采用工厂模式及反射机制在服务端创建远程对象,在客户短只需调用Factory.CreateInstance(Type(InterfaceName),object[] args)即可创建远程对象,Factory工厂类采用了WellKnown服务端的SinglTon激活模式,其他的远程...

    UniversalLoadData:通用库帮助您加载数据

    UniversalLoadData 可以帮助您从互联网或安卓手机磁盘或数据库加载数据,所有这些问题都是异步的,它不会阻塞主线程。 并且做 http 请求是使用 ,如果需要,它还可以将响应 json 字符串解析为 java bean(使用 Gson...

    DepartureTime:公共交通的实时发车时间应用程序还支持查找最近的路线停靠点

    出发时间 一款公交实时发车时间APP,还支持查找最近的路线/站点 解决方案主要集中在后端设计和实现 ... 只有当我们在地图中找不到它时,我们才会通过 API 调用检索该项目。 Architecture(classes): -MockDB: 单

Global site tag (gtag.js) - Google Analytics