java - 如何在运行时在启用 Spring 的 Web 应用程序中安排新方法?

标签 java spring

现在我有一个带有 @Scheduled 方法的 bean,工作正常;它在我的 applicationContext.xml 中声明。

<!-- some JPA stuff -->

<bean id="aWorkingBean" class="some.package.WorkingBean">
    <property name="someDAO" ref="someDAO" />
</bean>

<task:annotation-driven scheduler="myScheduler" />
<task:scheduler id="myScheduler" pool-size="10" />

我想做的是根据请求以编程方式安排另一种方法(例如加载一些带注释的类并注入(inject)其依赖项)。像这样的东西:

WebApplicationContext ctx = ContextLoader.getCurrentWebApplicationContext();
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(NonWorkingBean.class);
// add DAO references...
ctx.registerBeanDefinition("nonWorkingBean", builder.getBeanDefinition()); // <-- this doesn't work

显然它不起作用,因为 XmlWebApplicationContext 是只读的并且没有 registerBeanDefinition 方法。还有其他方法可以实现吗?

我正在使用 Tomcat 6.0.29 和 Spring 3.0.4

最佳答案

<task:scheduler>@Scheduled实际上只是一种调度静态任务的便捷方法。它不太适合动态调度。是的,您可以让它发挥作用,但这会很尴尬。

当你输入 <task:scheduler id="myScheduler">在你的配置中,Spring 创建一个 TaskScheduler bean 叫myScheduler .这可以注入(inject)到您自己的 bean 中,并且可以通过编程方式调用以安排新任务。您需要创建一个 Runnable传递给 TaskScheduler ,但这应该很简单。

关于java - 如何在运行时在启用 Spring 的 Web 应用程序中安排新方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4279446/

相关文章:

java - 使用OGNL获取参数

java - Hibernate单向多对一和级联删除

java - 我想将 MultipartFile 转换为所需类型 byte[] 但出现错误

java - Spring Boot 找不到/WEB-INF/classes/index.jsp

mysql - Grails 数据库逆向工程失败

Spring 4 STOMP Websockets - 如何实现多 channel

java - 尽管使用 "ADD JAR"添加 jar 文件,Hive shell 在执行查询时仍会抛出 Filenotfound 异常

java - 如何将 HashMap<K, V> 值类型从 Object 更改为 String?

java - 在 lambda 形状分析期间检测到内部不一致

java - 通用 DAO 实现, Controller 级别注入(inject)失败