0
Springブートから複数のデータベースに接続しています。SpringブートJdbcのMySQLデータベースの特定のデフォルトスキーマへの方法
application.properties:
datasource.target.url=jdbc:mysql://localhost:3306/db_test_1?useSSL=false
datasource.target.driver-class-name=com.mysql.jdbc.Driver
datasource.origin.url=jdbc:mysql://localhost:3306/db_test_2?useSSL=false
datasource.origin.driver-class-name=com.mysql.jdbc.Driver
データベース設定:私たちは春の対応のJDBCテンプレートを使用していると我々はスキーマ名を定義しているにもかかわらず、我々は明示的に各クエリのスキーマに名前を付ける必要があり
@Configuration
public class DatabaseConfig {
@Bean(name = "originJdbcTemplate")
public JdbcTemplate originJdbcTemplate() {
return new JdbcTemplate(originDataSource());
}
@Bean(name = "targetJdbcTemplate")
public JdbcTemplate targetJdbcTemplate() {
return new JdbcTemplate(targetDataSource());
}
@Bean
@Primary
@ConfigurationProperties("datasource.origin")
public DataSourceProperties originDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
@ConfigurationProperties("datasource.origin")
public DataSource originDataSource() {
return originDataSourceProperties().initializeDataSourceBuilder().build();
}
@Bean
@ConfigurationProperties("datasource.target")
public DataSourceProperties targetDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@ConfigurationProperties("datasource.target")
public DataSource targetDataSource() {
return targetDataSourceProperties().initializeDataSourceBuilder().build();
}
}
アプリケーションのプロパティで上記のURLにあります。 例えば: スキーマ名なしの問い合わせは、私はそれがSpring構成でどのように行うのか、私はConnection.setCatalog()
使用する必要があります。このSO Answer あたりとして
select * from db_test_1.user //works with schema name
select * from user //doesn't work
動作しませんか?委任データソース
class DefaultSchemaDelegatingDS extends DelegatingDataSource {
private final String catalogName;
public DefaultSchemaDelegatingDS(final String catalogName, final DataSource dataSource) {
super(dataSource);
this.catalogName = catalogName;
}
@Override
public Connection getConnection() throws SQLException {
final Connection connection = super.getConnection();
connection.setCatalog(this.catalogName);
return connection;
}
}
を使用することにより