Springboot2.0 集成Activiti6

本文講述如何使用Springboot2.0 集成Activiti6 並配置自定義的數據源。

1.依賴

        <!-- Soringboot的版本 -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.0.RELEASE</version>
            <relativePath/>
        </parent>        
        
        <!-- Springboot 基礎依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- 數據源相關 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.20</version>
        </dependency>
        
        <!-- activiti依賴 -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter-basic</artifactId>
            <version>6.0.0</version>
        </dependency>

2.Springboot yml文件配置

server:
  port: 8040

spring:
  application:
    name: activiti        #服務名稱
  activiti:
    database-schema-update: true
    check-process-definitions: false  #校驗bpmn文件是否存在

# 數據庫配置     由環境決定
druid:
  datasource:
    url: jdbc:mysql://IP:3306/activiti?characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useUnicode=true   #數據庫URL/庫名
    driverClassName: com.mysql.jdbc.Driver  #JDBC驅動類
    username: root      #用戶名
    password: root      #密碼
    initialSize: 3        #初始化連接池大小
    minIdle: 3            #最小活躍數
    maxActive: 20          #最大活躍數
    maxWait: 5000          #最大等待超時時間
    timeBetweenEvictionRunsMillis: 50000  #每隔多少毫秒運行一次空閒連接回收器
    minEvictableIdleTimeMillis: 300000    #池中的連接空閒多少毫秒後被回收
    validationQuery: SELECT 1             #驗證使用的SQL語句
    testWhileIdle: true             #指明連接是否被空閒連接回收器(如果有)進行檢驗.如果檢測失敗,則連接將被從池中去除.
    testOnBorrow: false             #借出連接時是否需要測試
    testOnReturn: false             #歸還連接時是否需要測試
    filters: stat                   #監控

3.配置數據源及事務

@Configuration
public class DataSourceConfig {

    @Value("${druid.datasource.driverClassName}")
    private String driverClassName;
    @Value("${druid.datasource.url}")
    private String url;
    @Value("${druid.datasource.username}")
    private String userName;
    @Value("${druid.datasource.password}")
    private String password;
    @Value("${druid.datasource.initialSize}")
    private int initialSize;
    @Value("${druid.datasource.minIdle}")
    private int minIdle;
    @Value("${druid.datasource.maxActive}")
    private int maxActive;
    @Value("${druid.datasource.maxWait}")
    private long maxWait;
    @Value("${druid.datasource.timeBetweenEvictionRunsMillis}")
    private long timeBetweenEvictionRunsMillis;
    @Value("${druid.datasource.minEvictableIdleTimeMillis}")
    private long minEvictableIdleTimeMillis;
    @Value("${druid.datasource.validationQuery}")
    private String validationQuery;
    @Value("${druid.datasource.testWhileIdle}")
    private boolean testWhileIdle;
    @Value("${druid.datasource.testOnBorrow}")
    private boolean testOnBorrow;
    @Value("${druid.datasource.testOnReturn}")
    private boolean testOnReturn;
    @Value("${druid.datasource.filters}")
    private String filters;
    
    @Bean
    public DruidDataSource dataSource() throws SQLException {
        DruidDataSource dataSource = new DruidDataSource();

        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(userName);
        dataSource.setPassword(password);
        //配置初始化大小、最大、最小
        dataSource.setInitialSize(initialSize);
        dataSource.setMinIdle(minIdle);
        dataSource.setMaxActive(maxActive);
        //配置獲取連接等待超時的時間
        dataSource.setMaxWait(maxWait);
        //配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒
        dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
        //配置一個連接在池中最小生存的時間,單位是毫秒
        dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
        dataSource.setValidationQuery(validationQuery);
        dataSource.setTestWhileIdle(testWhileIdle);
        dataSource.setTestOnBorrow(testOnBorrow);
        dataSource.setTestOnReturn(testOnReturn);
        dataSource.setFilters(filters);
        return dataSource;
    }

    @Bean(name = "transactionManager")
    public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

4.Activiti配置,重新注入數據源以及事務

@Configuration
public class ActivitiConfig extends AbstractProcessEngineAutoConfiguration {
    @Bean
    public SpringProcessEngineConfiguration springProcessEngineConfiguration(
            DataSource dataSource,
            PlatformTransactionManager transactionManager,
            SpringAsyncExecutor springAsyncExecutor) throws IOException {
        return this.baseSpringProcessEngineConfiguration(dataSource, transactionManager, springAsyncExecutor);
    }
}

5.系統啓動類

注意,系統沒有配置Security 因此需要將SecurityAutoConfiguration去除,否則會報錯

@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
public class ActivitiApplication {

    private static final Logger logger = LoggerFactory.getLogger(ActivitiApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(ActivitiApplication.class, args);
        logger.info("=========== activiti service started successfully ===========");
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章