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);
}
}