如何为每个会话创建自定义数据源

时间:2018-08-21 02:39:06

标签: spring spring-boot spring-data-jpa spring-data

我想在Spring Boot中创建一个无状态的bean,使用户能够连接到特定的数据库,所以我从这段代码开始,但是对于spring boot我还是很陌生。

@Bean
@Primary 
public DataSource helloDataSource() {

    return DataSourceBuilder.create()
            .username("myUsername")
            .password("myPassword")
            .driverClassName("myDBDriver")
            .build();
}

那么使该代码正常工作并连接到任何数据库(也是远程数据库)的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

有几种方法可以完成此操作。我首选的方法之一是通过属性文件提供数据源的配置。这是postgresql的示例属性文件:

pg.datasource.url=jdbc:postgresql://db-server-bar:5432/app-db
pg.datasource.username=root
pg.datasource.password=toor
pg.datasource.driver-class-name=org.postgresql.Driver

现在您可以为每个数据源创建配置类:

public class BarDbConfig {

  @Bean(name = "pgDataSource")
  @ConfigurationProperties(prefix = "pg.datasource")
  public DataSource dataSource() {
    return DataSourceBuilder.create().build();
  }

  @Bean(name = "barEntityManagerFactory")
  public LocalContainerEntityManagerFactoryBean 
  barEntityManagerFactory(
    EntityManagerFactoryBuilder builder,
    @Qualifier("pgDataSource") DataSource dataSource
  ) {
    return
      builder
        .dataSource(dataSource)
        .packages("com.app.domain")
        .persistenceUnit("pg")
        .build();
  }
}

有关详细教程,请参阅this tutorial

在某些情况下,您想在运行时切换数据库。在这种情况下,您可以使用名为AbstractRoutingDataSource的东西。有关如何使用此功能的详细教程,请参见Spring's official blog site