1

私は、AbstractRoutingDataSourceを使用してダイナミックデータソース(セッションベース)を作成しようとしていますが、起動時にAbstractRoutingDataSourceのdecideCurrentLookupKey()関数を呼び出すことを続けています。スプリングブートAbstractRoutingDataSource

@ConfigurationProperties(prefix = "datasource.int") 
@Bean 
public DataSource internal() { 
    return DataSourceBuilder.create().build(); 

} 

@ConfigurationProperties(prefix = "datasource.ext") 
@Bean 
public DataSource external() { 
    return DataSourceBuilder.create().build(); 
} 

@Bean(name = "dataSource") 
@Qualifier("dataSource") 
public DynamicRoutingDataSourceResolver dataSource() { 
    DynamicRoutingDataSourceResolver resolver = new DynamicRoutingDataSourceResolver(); 
    DataSource internal = internal(); 
    DataSource external = external(); 
    Map<Object, Object> dataSources = new HashMap<>(); 
    dataSources.put(env.getRequiredProperty("app.param.int"), internal); 
    dataSources.put(env.getRequiredProperty("app.param.ext"), external); 
    resolver.setDefaultTargetDataSource(internal); 
    resolver.setTargetDataSources(dataSources); 
    resolver.afterPropertiesSet(); 

    return resolver; 
} 

public class DynamicRoutingDataSourceResolver extends AbstractRoutingDataSource { 

@Override 
protected Object determineCurrentLookupKey() { 

    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); 
    Object o = request.getSession().getAttribute(Constant.DATASOURCE); 
    return o; 

} 

}

RequestAttributesがヌルであるため、それは、NullPointerExceptionがスロー。 @Primaryをデータソースの1つに入れようとしましたが、AbstractRoutingDataSource decideCurrentLookupKey()がクエリを実行しようとしたときにトリガされていません。

私はスプリングデータjpaを使用しています。

はあなたがここに@Primaryのいずれかの形式を指定する必要はありませんもsession based data source

答えて

0

参照してください。

すべてのデータソースを作成してAbstractRoutingDataSourceに割り当てるだけです。既定のデータソースが1つある場合は、コードショーと同様にを使用して設定します。

あなたの場合のNullPointerExceptionは、あなたのコードが守る必要があるものです。リクエストデータがリゾルバに存在しない場合は、データソース検索キーの値をnullに戻すだけです。返された検索キーのいずれかであるnullまたは指定されたキーは、ルックアップマップを介してデータソースを定義されていない場合

AbstractRoutingDataSourceは、定義されたデフォルトのデータソースを使用しています。

関連する問題