2017-01-06 9 views
0

複数のデータソースを持つマルチテナントアプリケーションがあり、データプールプロパティ(maxActive、minIdleなど)を個別に設定する必要があります。Tomcatプールプロパティを動的に設定する

は現在、私はorg.apache.tomcat.jdbc.pool.DataSourceを構築することだし、dataSource.setUserName()dataSource.setPassword()を使用して手動でユーザー名やパスワードなどいくつかのプロパティを設定します。私は、文字列から設定をロードすることによって残りのプロパティを設定したいと考えています。例えば、minIdle=20;initialSize=15です。

DataSourceには2つの方法がありますが、これは実現するように見えますが、私が期待しているようには見えません。いくつかのプロパティを持つdataSource.setConnectionProperties("..")と、Propertiesオブジェクトを設定してdataSource.setDbProperties()に渡しましたが、どちらもJMXを通じてプール属性を表示しても効果がなかったようです。私はdataSource.setInitialSize()のような特定のセッターを介してのみこれらのプロパティを変更することができました。

上記の試みを行わずに各プロパティを文字列から設定する唯一の方法は、各プロパティを繰り返し実行し、if-elseまたはswitch-caseロジックを使用して値を設定するために呼び出すdataSourceのセッター。

個々のセッターを呼び出さずに文字列からこれらのプロパティを動的に設定する方法はありますか?私はどちらかsetConnectionPropertiesまたはsetDbPropertiesのユーザ名を設定

は、それが変更をしましたが、私は、これは私が効果を持っていなかった設定しようとした他の特性として、ユーザー名とパスワードのようなものに特異的であってもよいと思います。

編集:明確にするために、データソースのプロパティがデータベースからロードされ、新しいデータソースがオンザフライで追加される可能性があるため、アプリケーションプロパティの使用は機能しません。

答えて

0

私はあなたがスプリングブートプロジェクトに取り組んでいると仮定しています。その場合

は、あなたの春ブート

spring.datasource.username=XXX 
spring.datasource.password=XXX 
spring.datasource.max-active=XXX 
spring.datasource.min-idle=XXX 

のapplication.propertiesファイルのプロパティを作成し、

このよう
@Configuration 
public class DataSourceConfiguration { 

    @Value("${spring.datasource.url}") 
    private String url; 
    @Value("${spring.datasource.driverClassName}") 
    private String driverClass; 
    @Value("${spring.datasource.username}") 
    private String username; 
    @Value("${spring.datasource.password}") 
    private String password; 
    @Value("${spring.datasource.min-idle}") 
    private Long minIdle; 

    @Bean 
    @Primary 
    public DataSource dataSource() { 
     DataSource dataSource = new DataSource(); 
     dataSource.setJdbcUrl(url); 
     dataSource.setDriverClassName(driverClass); 
     dataSource.setUsername(username); 
     dataSource.setPassword(password); 
     dataSource.setMinimumIdle(minIdle); 
     return dataSource; 
    } 
} 

以下のようにデータソースを作成するには、設定ファイルを作成します異なる名前の複数のプロパティを作成し、異なるBeanのデータソースを作成する際に参照できます。

必要に応じて、application.propertiesファイルをプロジェクト外に置き、@PropertySourceアノテーションをメインクラスに使用してアクセスできます。

0

私はSpring Boot ConfigurationPropertiesサポートを使用します。マニュアル:

74.2 2つのデータソースの設定 複数のデータソースを作成する場合は、最初のデータソースを作成するのと同じように動作します。 JDBCまたはJPAのデフォルトの自動設定を使用している場合(@Autowiredの注入によってそれが選択される場合)、それらの1つを@Primaryとしてマークすることができます。

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

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

あなたはプロパティファイルで同様の特性の負荷を持っていることについて懸念している場合は、(それらを設定し、GITでバージョン管理することができます)春のconfigサーバは役立つかもしれません。

関連する問題