Contenu connexe Similaire à クラウド時代だからSpring-Retryフレームワーク (20) クラウド時代だからSpring-Retryフレームワーク4. Who?
● 渡辺 祐
● (株)ビズリーチ
● SREグループ
○ Site Reliability
Engeneering
4
5. アンケート
● Java 5, 6, 7
● Java 8
● Java 9,10,11,12…
● まさかのJava1.3, 1.4
● わからない
5
19. フェイルオーバーメカニズムでは、スタンバイ DB インスタンスをポイントするように DB
インスタンスの DNS レコードが自動的に変更されます。したがって、DB インスタンスへ
の既存の接続の再確立が必要になります。Java DNS キャッシュメカニズムがどのよう
に機能するかによって、JVM 環境の再設定が必要になる場合があります。フェイルオー
バーの際に DNS 値をキャッシュする Java アプリケーションの管理方法の詳細につい
ては、「AWS SDK for Java」を参照してください。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html
RDSのマニュアルなのになぜか
「Javaの場合は注意しろ」とわざわざ書いてある(笑)
19
23. @Bean
public DataSource dataSource() {
ds = new BasicDataSource();
ds.setUrl()...setUser()... setPassword()...
ds.maxActive(10? 50? アプリによりけり)
ds.setValidationQuery(“SELECT 1”)
return new TransactionAwareDatasourceProxy(ds)
} // えっ?これだけ?
23
29. @Bean
public DataSource dataSource() {
conf = new HikariConfig();
conf.setUrl()...setUser()...
conf.setMaxIdle(10? 50? アプリによりけり)
conf.setConnectionInitSql(...)
conf.setConnectionTimeout(数秒)
conf.setValidationTimeout(数秒)
意外と少ない設
定で良さげ
29
35. retryTemplate = new RetryTemplate();
retryTemplate.setBackOffPolicy(省略);
retryTemplate.setRetryPolicy(省略);
例: Excepation.classはリトライ対象だが
RuntimeExceptionは対象外にする、等
まずRetryTemplateを準備しておく
35
36. spring-jdbc提供のDataSourceを拡張
public class FooDataSource extends DelegatingDataSource {
@Override
public Connection getConnection() throws SQLException {
return retryTemplate.execute(context -> {
if (context.getRetryCount() > 0) { /* warnログなど */ }
return super.getConnection();
});
36
37. @Bean
public java.sql.DataSource dataSource() {
conf = new HikariConfig();
conf.set…(jdbc-url, user, その他もろもろ)
hikariDs = new HikariDataSource(conf);
fooDs = new 前ページのFooDataSource(hikariDs);
ds = new TransactionAwareDatasourceProxy(fooDs);
return ds;
37