2017-10-28 3 views
0

私はSpringブートとSpringデータを使用していますが、主にMySQLデータソースを使用しますが、接続に失敗した場合はH2データソースに移動します。春のデータ - プライマリデータソースに失敗した場合、2番目のデータソースは表示されません

これまでのところ、設定で@Primaryを変更しただけですが、@PrimaryをMySQL(メインデータソース)に入れ、自分のPCにMySQLサーバーを停止すると、もう一方のBeanは来ませんup ...私は何が必要ですか?

application.yml:

# Main properties 
spring: 
    application: 
    name: app 
    jpa: 
    database: default 
    show-sql: false 
    hibernate: 
     ddl-auto: update 
    properties: 
     hibernate: 
     format_sql: false 
     current_session_context_class: org.springframework.orm.hibernate5.SpringSessionContext 

# Main database: MySQL 
main.datasource: 
    url: jdbc:mysql://localhost:3306/app?useSSL=false 
    driver-class-name: com.mysql.jdbc.Driver 
    username: sa 
    password: sa 

# Backup database: H2 
backup.datasource: 
    url: jdbc:h2:${project.directory}/app;DB_CLOSE_ON_EXIT=FALSE 
    driver-class-name: org.h2.Driver 
    username: sa 
    password: sa 

メインデータソース

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories("org.app") 
@EntityScan("org.app") 
public class MainDataSourceConfig { 

    @Primary 
    @Bean(name = "mainDataSource") 
    @ConfigurationProperties(prefix = "main.datasource") 
    public DataSource mainDataSource() { 
     return DataSourceBuilder.create().build(); 
    } 

} 

バックアップデータソース:

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories("org.app") 
@EntityScan("org.app") 
public class BackupDataSourceConfig { 

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

} 

ありがとう!

答えて

0

私はそれを行う方法を見つけます。これが誰でも助けることを願っています:

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories("org.app") 
@EntityScan("org.app") 

public class DataSourceConfig { 

    private static final String USERNAME = "sa"; 
    private static final String PASSWORD = "sa"; 

    @Bean 
    @Primary 
    public DataSource dataSource() { 
     DataSource dataSource; 
     try { 
      dataSource = getMainDataSource(); 
      dataSource.getConnection().isValid(500); 
     } catch (Exception e) { 
      log.error("Main database not valid.", e); 
      dataSource =getBackupDataSource(); 
     } 
     return dataSource; 
    } 

    private DataSource getMainDataSource() { 
     return DataSourceBuilder.create() 
       .driverClassName("com.mysql.jdbc.Driver") 
       .username(USERNAME) 
       .password(PASSWORD) 
       .url("jdbc:mysql://localhost:3306/app?useSSL=false") 
       .build(); 
    } 

    private DataSource getBackupDataSource() { 
     return DataSourceBuilder.create() 
       .driverClassName("org.h2.Driver") 
       .username(USERNAME) 
       .password(PASSWORD) 
       .url("jdbc:h2:/app;DB_CLOSE_ON_EXIT=FALSE") 
       .build(); 
    } 
} 

ちょうど豆です。

関連する問題