Spring Boot における複数データソースとDruid監視の設定方法

依存関係の追加

まずpom.xmlにDruidの依存関係を追加します。

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.23</version>
</dependency>

データソース設定

application.propertiesで複数データソースの設定を行います。

# プライマリデータソース (MySQL)
spring.datasource.primary.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.primary.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.primary.url=jdbc:mysql://localhost:3306/main_db
spring.datasource.primary.username=root
spring.datasource.primary.password=password

# セカンダリデータソース (SQL Server)
spring.datasource.secondary.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.secondary.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.secondary.url=jdbc:sqlserver://localhost:1433;DatabaseName=secondary_db
spring.datasource.secondary.username=sa
spring.datasource.secondary.password=password

データソース設定クラス

@Configuration
@EnableConfigurationProperties
public class DatabaseConfiguration {

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource primaryDataSource() {
        return DruidDataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    public DataSource secondaryDataSource() {
        return DruidDataSourceBuilder.create().build();
    }
}

Druid監視設定

@Configuration
public class DruidMonitoringConfig {

    @Bean
    public ServletRegistrationBean<StatViewServlet> druidStatViewServlet() {
        ServletRegistrationBean<StatViewServlet> registrationBean = 
            new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
        
        Map<String, String> initParams = new HashMap<>();
        initParams.put("loginUsername", "admin");
        initParams.put("loginPassword", "admin");
        initParams.put("resetEnable", "false");
        
        registrationBean.setInitParameters(initParams);
        return registrationBean;
    }

    @Bean
    public FilterRegistrationBean<WebStatFilter> druidWebStatFilter() {
        FilterRegistrationBean<WebStatFilter> filterBean = 
            new FilterRegistrationBean<>(new WebStatFilter());
        
        Map<String, String> initParams = new HashMap<>();
        initParams.put("exclusions", "*.js,*.css,/druid/*");
        
        filterBean.setInitParameters(initParams);
        filterBean.setUrlPatterns(Arrays.asList("/*"));
        return filterBean;
    }
}

データソースの利用

@Repository
public class UserRepository {

    @Autowired
    @Qualifier("primaryDataSource")
    private DataSource primaryDataSource;

    @Autowired
    @Qualifier("secondaryDataSource")
    private DataSource secondaryDataSource;

    public List<User> getUsersFromPrimary() {
        // プライマリデータソースを使用した処理
        return new JdbcTemplate(primaryDataSource).query("SELECT * FROM users", ...);
    }

    public List<User> getUsersFromSecondary() {
        // セカンダリデータソースを使用した処理
        return new JdbcTemplate(secondaryDataSource).query("SELECT * FROM users", ...);
    }
}

これでブラウザから http://localhost:8080/druid にアクセスすると、Druidの監視画面が表示されます。

タグ: Spring Boot Druid データベース接続 MySQL SQL Server

8月19日 05:22 投稿