activiti 如何使用database前缀来区分activiti数据库和业务数据库

2018-02-27 11:00:04来源:oschina作者:刘文杰_人点击

分享

第一步是先集成好activiti,我使用的是5.22.0,使用springboot集成,pom文件如下:




org.springframework.boot
spring-boot-starter-parent
1.5.2.RELEASE



1.8
5.22.0



org.springframework.boot
spring-boot-starter-thymeleaf


org.springframework.boot
spring-boot-starter-web


org.activiti
activiti-spring-boot-starter-basic
${activiti.version}


mysql
mysql-connector-java
runtime


org.springframework.boot
spring-boot-starter-test
test



配置springboot的启动配置文件中的数据库,我们指定一个独立的数据库来进行创建activiti的数据库


spring:
datasource:
url: jdbc:mysql://localhost:3306/activiti?characterEncoding=utf8
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
jpa:
show-sql: true
hibernate:
ddl-auto: falsedebug: true

运行启动类,


@SpringBootApplication
public class ActivitiApplication {
/**
* Description:
* @author Liu Wenjie
* @date 2018年2月11日 上午10:38:00
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(ActivitiApplication.class, args);
}
}

我们打开数据库,可以看到已经动态生成了对应的数据库文件,而正常业务我们不想使用activiti的数据库作为数据源的链接源,那么我们就修改配置文件的链接到test 数据库上,修改后的配置如下:


spring:
datasource:
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
jpa:
show-sql: true
hibernate:
ddl-auto: falsedebug: true

如果我们现在启动,那么activiti会默认在test database上创建数据库表结构,这时候我们需要增加一个配置类,


@Component
public class ActivitiProcessEngineConfigurationConfigurer implements ProcessEngineConfigurationConfigurer {
/**
*

Description:


* @author Liu Wenjie
* @date 2018年2月12日 上午11:09:19
* @param processEngineConfiguration
* @see org.activiti.spring.boot.ProcessEngineConfigurationConfigurer#configure(org.activiti.spring.SpringProcessEngineConfiguration)
*/
@Override
public void configure(SpringProcessEngineConfiguration processEngineConfiguration) {
processEngineConfiguration.setDatabaseTablePrefix("activiti.");
processEngineConfiguration.setTablePrefixIsSchema(true);
processEngineConfiguration.setDatabaseSchemaUpdate("no");
}
}

configure方法里的方法是为了让activiti开始时不创建也不校验activiti版本,然后在业务执行的时候都增加对应的数据库前缀,这样变相的解决了activiti的表与业务表不在同一个数据库的问题。


activiti的源码关键点在:


DbSqlSession.class中的以下方法:


public void performSchemaOperationsProcessEngineBuild() {
String databaseSchemaUpdate = Context.getProcessEngineConfiguration().getDatabaseSchemaUpdate();
if (ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_DROP_CREATE.equals(databaseSchemaUpdate)) {
try {
dbSchemaDrop();
} catch (RuntimeException e) {
// ignore
}
}
if ( org.activiti.engine.ProcessEngineConfiguration.DB_SCHEMA_UPDATE_CREATE_DROP.equals(databaseSchemaUpdate)
|| ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_DROP_CREATE.equals(databaseSchemaUpdate)
|| ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_CREATE.equals(databaseSchemaUpdate)
) {
dbSchemaCreate();} else if (org.activiti.engine.ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE.equals(databaseSchemaUpdate)) {
dbSchemaCheckVersion();} else if (ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE.equals(databaseSchemaUpdate)) {
dbSchemaUpdate();
}
}

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台