我试图使用Activiti和Spring MVC框架在Web应用程序中创建工作流,因此我必须通过applicationContext.xml文件注入Activiti Services,然后自动装配这些服务。
这是JUnit测试后的consol中的问题
GRAVE:在允许TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@14c8743]准备测试实例[tds_erp.testSpring@144719c] org.springframework.beans.factory.BeanCreationException时捕获了异常:创建名称为’tds_erp的bean时出错.testSpring’:自动连接的依赖项注入失败;嵌套的异常是org.springframework.beans.factory.BeanCreationException:无法自动连线字段:org.activiti.engine.RepositoryService tds_erp.testSpring.repositoryService; 嵌套的异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[org.activiti.engine.RepositoryService]的合格Bean作为依赖项:预计至少有1个Bean可以作为此依赖项的自动装配候选。依赖注释: 原因:org.springframework.beans.factory.BeanCreationException:无法自动连线字段:org.activiti.engine.RepositoryService tds_erp.testSpring.repositoryService; 嵌套的异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[org.activiti.engine.RepositoryService]的合格Bean作为依赖项:预计至少有1个Bean可以作为此依赖项的自动装配候选。依赖项注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)} 由以下原因引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[org.activiti.engine.RepositoryService]的合格Bean作为依赖项:预计至少有1个Bean可以作为此依赖项的自动装配候选。依赖项注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}
GRAVE:在允许TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@14c8743]准备测试实例[tds_erp.testSpring@144719c] org.springframework.beans.factory.BeanCreationException时捕获了异常:创建名称为’tds_erp的bean时出错.testSpring’:自动连接的依赖项注入失败;嵌套的异常是org.springframework.beans.factory.BeanCreationException:无法自动连线字段:org.activiti.engine.RepositoryService tds_erp.testSpring.repositoryService; 嵌套的异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[org.activiti.engine.RepositoryService]的合格Bean作为依赖项:预计至少有1个Bean可以作为此依赖项的自动装配候选。依赖注释:
原因:org.springframework.beans.factory.BeanCreationException:无法自动连线字段:org.activiti.engine.RepositoryService tds_erp.testSpring.repositoryService; 嵌套的异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[org.activiti.engine.RepositoryService]的合格Bean作为依赖项:预计至少有1个Bean可以作为此依赖项的自动装配候选。依赖项注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}
由以下原因引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[org.activiti.engine.RepositoryService]的合格Bean作为依赖项:预计至少有1个Bean可以作为此依赖项的自动装配候选。依赖项注释:{@ org.springframework.beans.factory.annotation.Autowired(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>
JUnit测试文件:
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()); } }
请帮帮我 !
看来您想在测试用例中使用applicatioContext.xmllike repositoryService等定义的bean 。但是您要声明的the @ContextConfiguration只是activiti的默认配置文件activiti.cfg.xml 。您可以在测试中尝试以下操作:
repositoryService
the @ContextConfiguration
activiti.cfg.xml
@ContextConfiguration("classpath:applicatioContext.xml")
只是一个建议:创建一个单独applicatioContext.xml的测试上下文类似于webapplicationContext中的上下文可能是一个好主意。这将有助于保留其他数据等,与常规开发数据库实例相比,您可以在其中更好地管理数据的前后条件。您甚至可能想为测试本身生成一个数据库实例,并在测试后将其拆除。
编辑:您可以给多个conf文件,例如- @ContextConfiguration(locations = { "classpath:applicatioContext.xml" , "classpath*:activiti.cfg.xml"})。检查这篇文章。
@ContextConfiguration(locations = { "classpath:applicatioContext.xml" , "classpath*:activiti.cfg.xml"})
除非您更改了默认位置,否则通常定义为“ <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">”的内容应在activiti.cfg.xml内部加载。
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">