Springboot 2.1.x 설정 Activiti 7 단독 데이터 원본 문제 해결

1|1 프로필
최근 최신 Activiti 7 을 기반 으로 SpringBoot 2 를 설 정 했 습 니 다.
간단하게 한 번 사용 하 였 다.시중 에서 Activiti 7 을 해결 하 는 튜 토리 얼 이 적 고 구덩이 도 많 으 며 Activiti 6 에서 데이터 원본 을 설정 하 는 것 과 Activiti 7 이 다 르 기 때문에 Activiti 6 를 바탕 으로 Activiti 7 에서 정상적으로 사용 할 수 없다.다음은 차이 점 을 살 펴 보 자.
질문
Activiti 6 다 중 데이터 원본 설정
6 의 설정 은 비교적 간단 하 다.
먼저 설정 추가:

# activiti    
spring.datasource.activiti.driver=com.mysql.jdbc.Driver
spring.datasource.activiti.url=jdbc:mysql://10.1.1.97:3311/test-activiti7-db?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true
spring.datasource.activiti.username=root
spring.datasource.activiti.password=Rtqw123OpnmER
spring.datasource.activiti.driverClassName=com.mysql.jdbc.Driver
  • spring.datasource.activiti 로 시작 하 는 DataSource 를@ConfigurationProperties 로 불 러 옵 니 다.
  • Activiticonfig 를 만 들 고 AbstractProcessEngine AutoConfiguration 방법 을 계승 하여 SpringProcessEngine Configurationbean 에 주입 하고 AbstractProcessEngine AutoConfiguration\#baseSpringProcessEngine Configuration 방법 으로 만 든 데이터 원본 을 주입 합 니 다.
  • 
    @Configuration
    public class ActivitiConfig extends AbstractProcessEngineAutoConfiguration {
    
     @Bean
     @ConfigurationProperties(prefix = "spring.datasource.activiti")
     public DataSource activitiDataSource() {
      return DataSourceBuilder.create().build();
     }
    
     @Bean
     public SpringProcessEngineConfiguration springProcessEngineConfiguration(
       PlatformTransactionManager transactionManager,
       SpringAsyncExecutor springAsyncExecutor) throws IOException {
    
      return baseSpringProcessEngineConfiguration(
        activitiDataSource(),
        transactionManager,
        springAsyncExecutor);
     }
    }
    Activiti 6 의 데이터 원본 설정 이 완료 되 었 습 니 다.7 이면 발견 할 수 있 습 니 다.AbstractProcessEngineAutoConfiguration#baseSpringProcessEngineConfiguration방법 은 이미 존재 하지 않 기 때문에 우 리 는 생산 테스트 소스 코드 구축 방식 을 개조 해 야 한다.
    1|3 복구
    Activiti 7 다 중 데이터 원본 설정
    설정 은 위 에 거 야.
  • Activiticonfig 를 만 들 고 AbstractProcessEngine AutoConfiguration 방법 을 계승 하여 SpringProcessEngine Configurationbean 에 주입 합 니 다.
  • spring.datasource.activiti 로 시작 하 는 DataSource
  • 를@ConfigurationProperties 로 불 러 옵 니 다.
    
    @Configuration
    public class ActivitiConfig extends AbstractProcessEngineAutoConfiguration {
     
     @Bean
     @ConfigurationProperties(prefix = "spring.datasource.activiti")
     public DataSource activitiDataSource() {
      return DataSourceBuilder.create().build();
     }
     
     ... 
    }
    SpringProcessEngineConfiguration        :
     @Bean
     @Primary
     public SpringProcessEngineConfiguration springProcessEngineConfiguration(
       PlatformTransactionManager transactionManager,
       SpringAsyncExecutor springAsyncExecutor,
       ActivitiProperties activitiProperties,
       ProcessDefinitionResourceFinder processDefinitionResourceFinder,
       @Autowired(required = false) DefaultActivityBehaviorFactoryMappingConfigurer processEngineConfigurationConfigurer,
       @Autowired(required = false) List<ProcessEngineConfigurator> processEngineConfigurators,
       UserGroupManager userGroupManager,
       DataSource dataSource) throws IOException {
    
      SpringProcessEngineConfiguration conf = new SpringProcessEngineConfiguration();
      conf.setConfigurators(processEngineConfigurators);
      configureProcessDefinitionResources(processDefinitionResourceFinder,
        conf);
      conf.setDataSource(dataSource);
      conf.setTransactionManager(transactionManager);
    
      if (springAsyncExecutor != null) {
       conf.setAsyncExecutor(springAsyncExecutor);
      }
      conf.setDeploymentName(activitiProperties.getDeploymentName());
      conf.setDatabaseSchema(activitiProperties.getDatabaseSchema());
      conf.setDatabaseSchemaUpdate(activitiProperties.getDatabaseSchemaUpdate());
      conf.setDbHistoryUsed(activitiProperties.isDbHistoryUsed());
      conf.setAsyncExecutorActivate(activitiProperties.isAsyncExecutorActivate());
      if (!activitiProperties.isAsyncExecutorActivate()) {
       ValidatorSet springBootStarterValidatorSet = new ValidatorSet("activiti-spring-boot-starter");
       springBootStarterValidatorSet.addValidator(new AsyncPropertyValidator());
       if (conf.getProcessValidator() == null) {
        ProcessValidatorImpl processValidator = new ProcessValidatorImpl();
        processValidator.addValidatorSet(springBootStarterValidatorSet);
        conf.setProcessValidator(processValidator);
       } else {
        conf.getProcessValidator().getValidatorSets().add(springBootStarterValidatorSet);
       }
      }
      conf.setMailServerHost(activitiProperties.getMailServerHost());
      conf.setMailServerPort(activitiProperties.getMailServerPort());
      conf.setMailServerUsername(activitiProperties.getMailServerUserName());
      conf.setMailServerPassword(activitiProperties.getMailServerPassword());
      conf.setMailServerDefaultFrom(activitiProperties.getMailServerDefaultFrom());
      conf.setMailServerUseSSL(activitiProperties.isMailServerUseSsl());
      conf.setMailServerUseTLS(activitiProperties.isMailServerUseTls());
    
      if (userGroupManager != null) {
       conf.setUserGroupManager(userGroupManager);
      }
    
      conf.setHistoryLevel(activitiProperties.getHistoryLevel());
      conf.setCopyVariablesToLocalForTasks(activitiProperties.isCopyVariablesToLocalForTasks());
      conf.setSerializePOJOsInVariablesToJson(activitiProperties.isSerializePOJOsInVariablesToJson());
      conf.setJavaClassFieldForJackson(activitiProperties.getJavaClassFieldForJackson());
    
      if (activitiProperties.getCustomMybatisMappers() != null) {
       conf.setCustomMybatisMappers(
         getCustomMybatisMapperClasses(activitiProperties.getCustomMybatisMappers()));
      }
    
      if (activitiProperties.getCustomMybatisXMLMappers() != null) {
       conf.setCustomMybatisXMLMappers(
         new HashSet<>(activitiProperties.getCustomMybatisXMLMappers()));
      }
    
      if (activitiProperties.getCustomMybatisXMLMappers() != null) {
       conf.setCustomMybatisXMLMappers(
         new HashSet<>(activitiProperties.getCustomMybatisXMLMappers()));
      }
    
      if (activitiProperties.isUseStrongUuids()) {
       conf.setIdGenerator(new StrongUuidGenerator());
      }
    
      if (activitiProperties.getDeploymentMode() != null) {
       conf.setDeploymentMode(activitiProperties.getDeploymentMode());
      }
    
      conf.setActivityBehaviorFactory(new DefaultActivityBehaviorFactory());
    
      if (processEngineConfigurationConfigurer != null) {
       processEngineConfigurationConfigurer.configure(conf);
      }
    
      return conf;
     }
    
     private void configureProcessDefinitionResources(
       ProcessDefinitionResourceFinder processDefinitionResourceFinder,
       SpringProcessEngineConfiguration conf) throws IOException {
      List<Resource> procDefResources = processDefinitionResourceFinder
        .discoverProcessDefinitionResources();
      if (!procDefResources.isEmpty()) {
       conf.setDeploymentResources(procDefResources.toArray(new Resource[0]));
      }
     }
    1|4 자주 발생 하 는 오류
    위 설정 에서 jdbcUrl is required with driver ClassName 오류 가 있 을 수 있 습 니 다.
    해결 방법 은 다음 과 같다.
    
    # activiti    
    spring.datasource.activiti.driver=com.mysql.jdbc.Driver
    spring.datasource.activiti.url=jdbc:mysql://10.1.1.97:3311/test-activiti7-db?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true
    # url  jdbc-url   jdbcUrl is required with driverClassName  
    #         :
    #                ,                      ,   IDE     (  DataSource        )。
    #   ,           Hikari,              ,  Hikari  url  (       jdbcUrl  )。      ,           :
    spring.datasource.activiti.jdbc-url=${spring.datasource.activiti.url}
    spring.datasource.activiti.username=root
    spring.datasource.activiti.password=Rtqw123OpnmER
    spring.datasource.activiti.driverClassName=com.mysql.jdbc.Driver
    1|5 총화
    Activiti 7 국내 튜 토리 얼 이 많 지 않 기 때문에 지역 사회 나 공식 문서,소스 코드 를 보고 자세히 공부 해 야 합 니 다.
    예제 코드 주소:activiti-starter
    총결산
    위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 Springboot 2.1.x 설정 Activiti 7 단독 데이터 소스 문 제 를 해결 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
    만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!

    좋은 웹페이지 즐겨찾기