【问题标题】:Specify separate datasource for Activiti in a Spring Boot app在 Spring Boot 应用程序中为 Activiti 指定单独的数据源
【发布时间】:2015-01-09 10:47:09
【问题描述】:

如何在我的 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;
}

但是我如何通知 Activiti 使用 activitiDataSource?

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

谢谢!

【问题讨论】:

  • 你是如何配置Activi的?您应该能够将 activiDataSource 传递到 SpringProcessEngineConfiguration bean

标签: java spring datasource spring-boot activiti


【解决方案1】:

@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 的基本示例。 基本上它在WaiterEntity/WaiterRepository 中持久化一个customerId(使用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);
    }
}

注意primaryDataSource 上的@Primary。如果您忽略它,您的WAITER_ENTITY 表将在activitiDataSource 中创建(无需任何其他特定配置)。

【讨论】:

    【解决方案2】:

    在 Spring boot 中,您应该在 application.properties 中配置您的数据源配置。

    例如:

    spring.datasource.url=jdbc:postgresql://localhost:5432/activiti_development
    spring.datasource.username=postgres
    spring.datasource.password=postgres
    spring.datasource.driver-class-name=org.postgresql.Driver
    

    参考:http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 2018-06-29
      • 2016-10-22
      • 1970-01-01
      相关资源
      最近更新 更多