Sprigbook 2.x配置Activiti 7単独データソースの問題を解決します。


1|1概要
最近は最新のActiviti 7に基づいてSpringBoot 2が配置されています。
簡単に使いました。市場でActiviti 7を解決する教程はとても少なくて、採坑も比較的に多いことを発見して、Activiti 6配置データ源とActiviti 7はある程度区別して、Activiti 6に基づいてActiviti 7の中で正常に使うことができないのです。じゃ、違いを見ましょう。
1|2問題
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
  • @ConfigrationProptiesでspring.datasource.activitiで始まるDataSourceをロードします。
  • ActivitiConfigを作成し、Abstract ProcessEnfigration法を継承してSpring Process Enfignation法を注入し、作成したデータをAbstract ProcessEnd AutoConfigrationメソッドに注入します。
  • 
    @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を作成し、Abstract Process EngingAutoConfigrationを引き継ぎます。
  • @ConfigrationPropertiesでspring.datasource.activitiで始まるDataSource
  • をロードします。
    
    @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 driverClass Nameエラーが発生する可能性があります。
    解決方法は以下の通りです
    
    # 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
    締め括りをつける
    以上述べましたが、Springbook t 11.x配置Activiti 7の単独データソースの問題を解決するために、皆さんに助けてほしいです。もし何か質問があれば、メッセージをください。編集者はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
    本文があなたのためになると思ったら、転載を歓迎します。出所を明記してください。ありがとうございます。