在Spring Boot应用中为Activiti指定单独的数据源

如何在Spring Boot" title="Spring Boot">Spring Boot应用程序中使用两个单独的数据源?

我希望应用程序使用一个dataSource,用于持久化模型,而Activiti引擎使用一个单独的dataSource,以便将其实体保存在单独的数据库中。

到目前为止,Activiti的表和我的应用程序的表是在同一数据库中创建的。

[编辑]:

我知道我可以定义两个单独的DataSource bean,例如:

@Bean

public DataSource appDataSource() {

BasicDataSource dataSource = new BasicDataSource();

dataSource.setDriverClassName("org.hsqldb.jdbcDriver");

dataSource.setUrl("xxx");

dataSource.setUsername("xxx");

dataSource.setPassword("xxx");

return dataSource;

}

@Bean

public DataSource activitiDataSource() {

BasicDataSource dataSource = new BasicDataSource();

dataSource.setDriverClassName("xxx");

dataSource.setUrl("xxx");

dataSource.setUsername("xxx");

dataSource.setPassword("xxx");

return dataSource;

}

但是如何通知Activiti使用activitiDataSource?

我正在使用Activiti 5.16.4,顺便说一句…

谢谢!

回答:

@ andy-

wilkinson给出了答案,但这是如何使用它的示例。根据您的建议,创建另一个DataSource,然后将其连接到SpringProcessEngineConfiguration。像这样:

@Configuration

public class ActivitiConfiguration extends AbstractProcessEngineAutoConfiguration {

@Bean

@ConfigurationProperties(prefix = "datasource.activiti")

public DataSource activitiDataSource() {

return DataSourceBuilder

.create()

.url("jdbc:h2:mem:activiti")

.username("activiti")

.driverClassName("org.h2.Driver")

.build();

}

@Bean

public SpringProcessEngineConfiguration springProcessEngineConfiguration(

PlatformTransactionManager transactionManager,

SpringAsyncExecutor springAsyncExecutor) throws IOException {

return baseSpringProcessEngineConfiguration(

activitiDataSource(),

transactionManager,

springAsyncExecutor);

}

}

Activiti将用于activitiDataSource创建其表并保留其数据。

现在,您可以创建另一个DataSource来携带应用程序表和数据。这是基于的基本示例spring-boot-sample-

basic。基本上,它customerIdWaiterEntity/中保留a WaiterRepository(使用Spring Data

JPA-为简洁起见,然后将其保留)传递到Activiti basic2.bpmn进程,该进程仅将其打印出到控制台。

@SpringBootApplication

public class Application {

@Bean

@Primary

@ConfigurationProperties(prefix = "datasource.primary")

public DataSource primaryDataSource() {

return DataSourceBuilder

.create()

.url("jdbc:h2:mem:primary")

.username("primary")

.driverClassName("org.h2.Driver")

.build();

}

@Bean

CommandLineRunner basics(final RuntimeService runtimeService,

final WaiterRepository repository) {

return new CommandLineRunner() {

@Override

public void run(String... strings) throws Exception {

runtimeService.startProcessInstanceByKey(

"waiter2",

Collections.singletonMap(

"customerId",

(Object) repository.save(new WaiterEntity(123L)).getCustomerId()));

}

};

}

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

注意@PrimaryprimaryDataSource。如果您省略该WAITER_ENTITY表,则将在中创建表activitiDataSource(没有任何其他特定配置)。

以上是 在Spring Boot应用中为Activiti指定单独的数据源 的全部内容, 来源链接: utcz.com/qa/432064.html

回到顶部