上一篇中用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>
配置好后运行, 不错! 单例效果达到了.
分享到:
相关推荐
设计模式是解决常见问题的成熟方案,它们为软件开发提供了良好的可扩展性和可维护性。 **工厂模式(Factory Pattern)** 工厂模式是一种创建型设计模式,它的主要目标是提供一个接口,用于创建某一类对象,而不需要...
由singlton事件发射器类驱动的全局事件总线。 使用此模块可以将某些东西钩在其他对象中。 安装 npm install node-singleton-event -save 如何使用 在要与另一个文件进行通信的每个文件中都需要它。 说些什么: ...
为了解决这个问题,代码中引入了一个简单的读写互斥锁(rwlock)结构。`LOCK`和`UNLOCK`宏用于获取和释放锁,`rwlock_rlock`和`rwlock_wlock`分别用于获取读锁和写锁。这样可以确保在设置数据时,同一时间只有一个...
采用工厂模式及反射机制在服务端创建远程对象,在客户短只需调用Factory.CreateInstance(Type(InterfaceName),object[] args)即可创建远程对象,Factory工厂类采用了WellKnown服务端的SinglTon激活模式,其他的远程...
UniversalLoadData 可以帮助您从互联网或安卓手机磁盘或数据库加载数据,所有这些问题都是异步的,它不会阻塞主线程。 并且做 http 请求是使用 ,如果需要,它还可以将响应 json 字符串解析为 java bean(使用 Gson...
出发时间 一款公交实时发车时间APP,还支持查找最近的路线/站点 解决方案主要集中在后端设计和实现 ... 只有当我们在地图中找不到它时,我们才会通过 API 调用检索该项目。 Architecture(classes): -MockDB: 单