str*_*ear 3 java spring datasource activiti spring-boot
我将如何在 Spring Boot 应用程序中使用两个单独的数据源?
我希望我的应用程序使用一个数据源,用于持久化我的模型和一个单独的数据源供 Activiti 引擎使用,因此它可以将其实体保存在单独的数据库中。
截至目前,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;
}
Run Code Online (Sandbox Code Playgroud)
但是我如何通知 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);
}
}
Run Code Online (Sandbox Code Playgroud)
Activiti 将使用它activitiDataSource来创建它的表并持久化它的数据。
现在您可以创建另一个DataSource来承载您的应用程序表和数据。这是一个基于spring-boot-sample-basic. 基本上它customerId在WaiterEntity/ WaiterRepository(使用 Spring Data JPA - 为简洁起见省略)中保留 a,然后将该持久值传递给 Activitibasic2.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);
}
}
Run Code Online (Sandbox Code Playgroud)
注意@Primary上primaryDataSource。如果您忽略这一点,您的WAITER_ENTITY表将在activitiDataSource(没有任何其他特定配置)中创建。
| 归档时间: |
|
| 查看次数: |
5547 次 |
| 最近记录: |