我们正在使用 Spring,我向我的同事建议他应该使用@Schedule
而不是使用手动编码行为 aRunnable
和Thread.sleep()
。
我指出注释更“高级”、更具描述性、更好的可配置性和可测试性,但这还不够令人信服。他争辩说他只需要一个非常简单的行为,所以使用“魔法”将是多余的,并导致不必要的开销。
我错过了一些好的论据吗?
我们正在使用 Spring,我向我的同事建议他应该使用@Schedule
而不是使用手动编码行为 aRunnable
和Thread.sleep()
。
我指出注释更“高级”、更具描述性、更好的可配置性和可测试性,但这还不够令人信服。他争辩说他只需要一个非常简单的行为,所以使用“魔法”将是多余的,并导致不必要的开销。
我错过了一些好的论据吗?
我认为这通常与您想要实现的抽象级别有关。在得到一些答案之前,我相信值得问一下:
这段代码有多少静态?换句话说,你所指的部分多久会随着时间而改变,无论是在逻辑上还是在它需要运行的时间表上?
基于这个问题,我认为无论使用什么框架/库,都应该尊重一件事:
任务的逻辑不应与它的调度方面交错。
因此,使用 Spring 或任何其他调度库都有第一个副作用,即除了调度和运行任务的部分之外,还为任务部分提供了单独的抽象。
因此,只要存在关注点和所需抽象的分离,我认为不使用任何特定库是可以的。另一方面,例如,如果不使用 Spring DI 来运行任务,那么可以再次争辩说实际上没有必要使用 Spring。
根据我对这个问题的理解,如果 Spring 对这个问题来说似乎太多了,我建议至少使用 Java 的 Timer 抽象。