当前位置: 首页 > 知识库问答 >
问题:

未能在Spring webapp中注入Activiti framework服务

钦永贞
2023-03-14

我试图使用Activiti和Spring MVC框架在我的web应用程序中创建一个工作流,因此我必须通过applicationContext.xml文件注入Activiti服务,然后autowire这些服务。

这就是JUnit测试后consol中的问题

Grave:允许TestExecutionListener[org.springframework.test.context.support.DependencyInjectionTestExecutionListener@14c8743]准备测试实例[tds_erp.testspring@144719c]org.springframework.beans.factory.beanCreationException:创建名为'tds_erp.testspring'的bean时出错:注入autowired依赖项失败;嵌套异常是org.springframework.beans.factory.beanCreationException:不能autowire字段:org.activiti.engine.repositoryservice tds_erp.testspring.repositoryservice;嵌套异常是org.springframework.beans.factory.nosuchBeanDefinitionException:没有找到用于依赖项的类型[org.activiti.engine.RepositoryService]的合格bean:预期至少有1个bean可以作为此依赖项的autowire候选bean。依赖注释:{@org.springframework.beans.factory.annotation.autowire(required=true)}

原因:org.springframework.beans.factory.beanCreationException:无法autowire字段:org.activiti.engine.repositoryservice tds_erp.testspring.repositoryservice;嵌套异常是org.springframework.beans.factory.nosuchBeanDefinitionException:没有找到用于依赖项的类型[org.activiti.engine.RepositoryService]的合格bean:预期至少有1个bean可以作为此依赖项的autowire候选bean。依赖注释:{@org.springframework.beans.factory.annotation.autowire(required=true)}

由:org.springframework.beans.factory.nosuchBeanDefinitionException引起:没有找到符合依赖项类型[org.activiti.engine.RepositoryService]的bean:预期至少有1个bean符合此依赖项的autowire候选项。依赖注释:{@org.springframework.beans.factory.annotation.autowire(required=true)}

applicatioContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
        ">


    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
        <property name="targetDataSource">
            <bean class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
                <property name="driverClassName" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/activiti" />
                <property name="username" value="root" />
                <property name="password" value="admin" />
            </bean>
        </property>
    </bean>
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
        <property name="databaseType" value="h2" />
        <property name="dataSource" ref="dataSource" />
        <property name="transactionManager" ref="transactionManager" />
        <property name="databaseSchemaUpdate" value="true" />
        <property name="deploymentResources"
            value="classpath*:chapter4/bookorder.spring.bpmn20.xml" />
        <property name="jobExecutorActivate" value="false" />
    </bean>
    <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
        <property name="processEngineConfiguration" ref="processEngineConfiguration" />
    </bean>
    <bean id="repositoryService" factory-bean="processEngine"
        factory-method="getRepositoryService" />
    <bean id="runtimeService" factory-bean="processEngine"
        factory-method="getRuntimeService" />
    <bean id="taskService" factory-bean="processEngine"
        factory-method="getTaskService" />
    <bean id="historyService" factory-bean="processEngine"
        factory-method="getHistoryService" />
    <bean id="managementService" factory-bean="processEngine"
        factory-method="getManagementService" />
</beans>
import static org.junit.Assert.assertEquals;

import java.util.HashMap;
import java.util.Map;

import org.activiti.bpmn.model.Task;
import org.activiti.engine.FormService;
import org.activiti.engine.HistoryService;
import org.activiti.engine.IdentityService;
import org.activiti.engine.ManagementService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.spring.ProcessEngineFactoryBean;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath*:applicatioContext.xml")

public class testSpring {

    @Autowired(required=true)
     RepositoryService repositoryService;
    @Autowired(required=true)
     RuntimeService runtimeService;
    @Autowired(required=true)
     TaskService taskService;


    @Test
    public void simpleSpringTest() {

    Map<String, Object> variableMap =
    new HashMap<String, Object>();
    variableMap.put("object", "Activiti in Action");
    variableMap.put("description", "123456");
    runtimeService.startProcessInstanceByKey(
    "employeeRequest", variableMap);

    Task task = (Task) taskService
    .createTaskQuery().taskAssignee("kermit")
    .singleResult();
    assertEquals("Complete order", task.getName());
    taskService.complete(task.getId());
    assertEquals(0, runtimeService.
    createProcessInstanceQuery().count());
    }
    }

求求你帮帮我!

共有1个答案

卜阳
2023-03-14

看起来您希望在测试用例中使用applicatiocontext.xmllikerepositoryservice等中定义的bean。但是您在@contextconfiguration中声明的只是Activiti的默认配置文件activiti.cfg.xml您可以在测试中尝试以下操作吗:

@ContextConfiguration("classpath:applicatioContext.xml")

只是一个建议:为测试上下文创建一个单独的applicatiocontext.xml可能是一个好主意,类似于WebApplicationContext中的上下文。这将有助于保存不同的数据等,在那里您可以比正常的开发DB实例更好地管理数据的前/后条件。您甚至可能希望为测试本身生成一个DB实例,并在测试结束后拆除。

编辑:可以给出多个conf文件,如下所示-@contextconfiguration(locations={“classpath:applicatiocontext.xml”,“classpath*:activiti.cfg.xml”})。查查这个帖子。

 类似资料:
  • 问题内容: 我想将服务注入app.config,以便可以在调用控制器之前检索数据。我这样尝试过: 服务: 配置: 但是我得到这个错误: 错误:未知提供程序:EditorApp的dbService 如何更正设置并注入此服务? 问题答案: Alex提供了无法执行您要尝试执行的操作的正确原因,因此+1。但是您遇到此问题是因为您没有完全使用解决方案的设计方式。 接受服务或函数的字符串,返回要注入的值。由于

  • 我有以下课程: 我从控制器调用方法test(): 然而,spring并没有注入构建。版本值,即使类具有组件注释。 我在控制器中使用相同的属性,它工作正常。 我做错了什么?

  • 我刚刚关注了下面这篇文章,https://spring.io/blog/2015/07/14/microservices-with-spring,但是我无法在尤里卡注册我的微服务。 customer-service.yml build . gradle for customer-service CustomerService.java 注册-server.yml

  • 问题内容: authService.getLoggedin()返回false或true取决于用户是否登录。然后,我想不允许他们进入网址,如果不允许的话。 但是我收到此错误:错误:[$ injector:modulerr]由于以下原因无法实例化模块WikiApp:[$ injector:unpr]未知提供程序:authService 问题答案: 在配置阶段,您只能要求提供程序($ routeProv

  • 我正在用Symfony制作简单的应用程序。我在这里配置了服务 我的服务使用存储库(例如,评论服务使用评论存储库),这里是的构造函数 性质 构造函数: 当我试图运行我的应用程序我得到这个错误 PHP致命错误:未捕获Symfony\Component\DependencyInjection\Exception\AutowiringFailedException:无法自动连线服务“AppBundle\R

  • 我尝试的方法之一是在从MessageBusListener创建FlowListener实例的同时传递服务引用。然而,当参数化服务被停用和激活回来时,我认为OSGi服务将创建一个新的服务实例并绑定到MessageBusListener,但是FlowListener仍然会有一个过时的引用。 期待其他方法,可以满足我的要求。