在Spring Boot应用中为Activiti指定单独的数据源
如何在Spring Boot" title="Spring Boot">Spring Boot应用程序中使用两个单独的数据源?
我希望应用程序使用一个dataSource,用于持久化模型,而Activiti引擎使用一个单独的dataSource,以便将其实体保存在单独的数据库中。
到目前为止,Activiti的表和我的应用程序的表是在同一数据库中创建的。
[编辑]:
我知道我可以定义两个单独的DataSource bean,例如:
@Beanpublic 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
。像这样:
@Configurationpublic 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。基本上,它customerId
在WaiterEntity
/中保留a WaiterRepository
(使用Spring Data
JPA-为简洁起见,然后将其保留)传递到Activiti basic2.bpmn
进程,该进程仅将其打印出到控制台。
@SpringBootApplicationpublic 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);
}
}
注意@Primary
上primaryDataSource
。如果您省略该WAITER_ENTITY
表,则将在中创建表activitiDataSource
(没有任何其他特定配置)。
以上是 在Spring Boot应用中为Activiti指定单独的数据源 的全部内容, 来源链接: utcz.com/qa/432064.html