You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gatling仿真中使用Spring Boot Bean?

在Gatling仿真类中使用Spring Bean的解决方案

问题分析

Gatling的Simulation类由自身测试引擎实例化,完全脱离Spring容器的管理流程,所以直接用@Autowired注解无法完成依赖注入——Spring根本没机会处理这个类的实例,自然没法注入Bean。硬编码能正常运行也验证了这一点:问题核心就是Spring容器未参与Simulation对象的创建。

解决方案

通过手动初始化Spring上下文,从容器中主动获取所需Bean,替代自动注入的方式。具体步骤如下:

  1. 创建Spring上下文工具类:用于全局初始化和获取Spring容器实例,确保上下文只被初始化一次。
  2. 在Simulation类中手动加载上下文并获取Bean:在Simulation的构造方法或静态块中完成上下文初始化,再提取需要的Bean。

代码示例

1. Spring上下文工具类

import org.springframework.boot.SpringApplication;
import org.springframework.context.ApplicationContext;

public class SpringContextHolder {
    private static volatile ApplicationContext context;

    public static void initContext(Class<?> springBootApplicationClass) {
        if (context == null) {
            synchronized (SpringContextHolder.class) {
                if (context == null) {
                    context = SpringApplication.run(springBootApplicationClass);
                }
            }
        }
    }

    public static <T> T getBean(Class<T> beanClass) {
        return context.getBean(beanClass);
    }
}

2. 修改后的Simulation类

public class MySimulation extends Simulation {

    private JMSConnectionFactoryBeanClass myConnectionFactory;

    public MySimulation() {
        // 传入你的Spring Boot启动类,初始化上下文
        SpringContextHolder.initContext(YourSpringBootApp.class);
        // 从容器中获取Bean
        myConnectionFactory = SpringContextHolder.getBean(JMSConnectionFactoryBeanClass.class);

        JmsProtocolBuilder jmsProtocol = jms.connectionFactory(myConnectionFactory);

        ScenarioBuilder scn = scenario("My Simulation Scenario")
                .exec(
                        jms("test")
                                .send()
                                .queue("myQueue")
                                .textMessage("message")
                );

        setUp(
                scn.injectOpen(rampUsers(10).during(5))
        ).protocols(jmsProtocol);
    }
}

注意事项

  • 确保你的Spring Boot启动类(带有@SpringBootApplication的类)能扫描到JMSConnectionFactoryBeanClass所在的包,否则容器无法创建对应的Bean。
  • 构建工具(Maven/Gradle)配置中,要确保Spring相关依赖(包括Spring Boot Starter、JMS相关依赖等)被包含在Gatling的运行时classpath中。比如Gradle中,需要在gatling配置块中引入这些依赖。
  • 上下文初始化用了双重校验锁,确保多线程环境下只初始化一次,避免重复启动Spring应用带来的资源浪费。

内容的提问来源于stack exchange,提问作者Simon E.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 14:10:25