r2dbc-use-multiple-database

R2dbc에서 여러개의 Database를 연결하는 방법

  • 여러 database를 연결하기 위해서는 기존 방식인 spring이 application.yml을 읽고 자동으로 jdbc의 connection을 만들어주는 방식 사용할 수 없다.
  • 그렇기에 아래와 같이 특정 package 하위의 repository에 특정 connection factory를 연결해 달라고 설정을 해야한다.
@Configuration
@EnableR2dbcRepositories(
    basePackages = "com.wordonline.account.repository",
    entityOperationsRef = "accountEntityTemplate"
)
public class AccountDbConfig {

    @Value("${spring.r2dbc.account.url}")
    private String url;
    @Value("${spring.r2dbc.account.username}")
    private String username;
    @Value("${spring.r2dbc.account.password}")
    private String password;

    @Bean(name = "accountConnectionFactory")
    public ConnectionFactory accountConnectionFactory() {
        ConnectionFactoryOptions baseOptions = ConnectionFactoryOptions.parse(url);

        ConnectionFactoryOptions options = baseOptions.mutate()
                .option(ConnectionFactoryOptions.USER, username)
                .option(ConnectionFactoryOptions.PASSWORD, password)
                .build();

        return ConnectionFactories.get(options);
    }

    @Bean(name = "accountEntityTemplate")
    public R2dbcEntityTemplate accountEntityTemplate(@Qualifier("accountConnectionFactory") ConnectionFactory connectionFactory) {
        return new R2dbcEntityTemplate(connectionFactory);
    }
}