选择 DataSource bean 与多个 DataSourceInitializers 一起使用
Selecting DataSource bean for use with multiple DataSourceInitializers
我有两个 DataSource bean 和两个 DataSourceInitializer bean,每个 DataSource 一个。这些配置位于不同的 class 文件中,但两个 DataSourceInitializers 都尝试设置 DataSourceOne。
如何告诉 DataSourceInitializerTwo 使用(注入?)DataSourceTwo bean?
//Data Source 1
@Bean
public DataSource dataSourceOne() {
JdbcDataSource ds = new JdbcDataSource();
ds.setUrl("jdbc:h2:mem:app1db;DB_CLOSE_DELAY=-1;MODE=Oracle;TRACE_LEVEL_SYSTEM_OUT=2;INIT=CREATE SCHEMA IF NOT EXISTS app1\;SET SCHEMA app1");
ds.setUser("app1");
ds.setPassword("app1");
return ds;
}
@Bean
public DataSourceInitializer dataSourceInitializerOne(final DataSource dataSource) {
final DataSourceInitializer initializer = new DataSourceInitializer();
initializer.setDataSource(dataSource);
initializer.setDatabasePopulator(DatabasePopulator());
return initializer;
}
//Data Source 2
@Bean
public DataSource dataSourceTwo() {
JdbcDataSource ds = new JdbcDataSource();
ds.setUrl("jdbc:h2:mem:app1db;DB_CLOSE_DELAY=-1;MODE=Oracle;TRACE_LEVEL_SYSTEM_OUT=2;INIT=CREATE SCHEMA IF NOT EXISTS app2\;SET SCHEMA app2");
ds.setUser("app2");
ds.setPassword("app2");
return ds;
}
@Bean
public DataSourceInitializer dataSourceInitializerTwo(final DataSource dataSource) {
final DataSourceInitializer initializer = new DataSourceInitializer();
initializer.setDataSource(dataSourceTwo);
initializer.setDatabasePopulator(databasePopulatorTwo());
return initializer;
}
DataSourceInitializer 方法似乎是根据参数名称注入 DataSource bean。只需让 returns DataSource 的方法名称与相应初始化方法采用的 DataSource 参数的名称相匹配即可。
//Data Source 1
@Bean
public DataSource dataSourceOne() {
JdbcDataSource ds = new JdbcDataSource();
ds.setUrl("jdbc:h2:mem:app1db;DB_CLOSE_DELAY=-1;MODE=Oracle;TRACE_LEVEL_SYSTEM_OUT=2;INIT=CREATE SCHEMA IF NOT EXISTS app1\;SET SCHEMA app1");
ds.setUser("app1");
ds.setPassword("app1");
return ds;
}
@Bean
public DataSourceInitializer dataSourceInitializerOne(final DataSource dataSourceOne) {
final DataSourceInitializer initializer = new DataSourceInitializer();
initializer.setDataSource(dataSourceOne);
initializer.setDatabasePopulator(DatabasePopulator());
return initializer;
}
//Data Source 2
@Bean
public DataSource dataSourceTwo() {
JdbcDataSource ds = new JdbcDataSource();
ds.setUrl("jdbc:h2:mem:app1db;DB_CLOSE_DELAY=-1;MODE=Oracle;TRACE_LEVEL_SYSTEM_OUT=2;INIT=CREATE SCHEMA IF NOT EXISTS app2\;SET SCHEMA app2");
ds.setUser("app2");
ds.setPassword("app2");
return ds;
}
@Bean
public DataSourceInitializer dataSourceInitializerTwo(final DataSource dataSourceTwo) {
final DataSourceInitializer initializer = new DataSourceInitializer();
initializer.setDataSource(dataSourceTwo);
initializer.setDatabasePopulator(databasePopulatorTwo());
return initializer;
}
我有两个 DataSource bean 和两个 DataSourceInitializer bean,每个 DataSource 一个。这些配置位于不同的 class 文件中,但两个 DataSourceInitializers 都尝试设置 DataSourceOne。
如何告诉 DataSourceInitializerTwo 使用(注入?)DataSourceTwo bean?
//Data Source 1
@Bean
public DataSource dataSourceOne() {
JdbcDataSource ds = new JdbcDataSource();
ds.setUrl("jdbc:h2:mem:app1db;DB_CLOSE_DELAY=-1;MODE=Oracle;TRACE_LEVEL_SYSTEM_OUT=2;INIT=CREATE SCHEMA IF NOT EXISTS app1\;SET SCHEMA app1");
ds.setUser("app1");
ds.setPassword("app1");
return ds;
}
@Bean
public DataSourceInitializer dataSourceInitializerOne(final DataSource dataSource) {
final DataSourceInitializer initializer = new DataSourceInitializer();
initializer.setDataSource(dataSource);
initializer.setDatabasePopulator(DatabasePopulator());
return initializer;
}
//Data Source 2
@Bean
public DataSource dataSourceTwo() {
JdbcDataSource ds = new JdbcDataSource();
ds.setUrl("jdbc:h2:mem:app1db;DB_CLOSE_DELAY=-1;MODE=Oracle;TRACE_LEVEL_SYSTEM_OUT=2;INIT=CREATE SCHEMA IF NOT EXISTS app2\;SET SCHEMA app2");
ds.setUser("app2");
ds.setPassword("app2");
return ds;
}
@Bean
public DataSourceInitializer dataSourceInitializerTwo(final DataSource dataSource) {
final DataSourceInitializer initializer = new DataSourceInitializer();
initializer.setDataSource(dataSourceTwo);
initializer.setDatabasePopulator(databasePopulatorTwo());
return initializer;
}
DataSourceInitializer 方法似乎是根据参数名称注入 DataSource bean。只需让 returns DataSource 的方法名称与相应初始化方法采用的 DataSource 参数的名称相匹配即可。
//Data Source 1
@Bean
public DataSource dataSourceOne() {
JdbcDataSource ds = new JdbcDataSource();
ds.setUrl("jdbc:h2:mem:app1db;DB_CLOSE_DELAY=-1;MODE=Oracle;TRACE_LEVEL_SYSTEM_OUT=2;INIT=CREATE SCHEMA IF NOT EXISTS app1\;SET SCHEMA app1");
ds.setUser("app1");
ds.setPassword("app1");
return ds;
}
@Bean
public DataSourceInitializer dataSourceInitializerOne(final DataSource dataSourceOne) {
final DataSourceInitializer initializer = new DataSourceInitializer();
initializer.setDataSource(dataSourceOne);
initializer.setDatabasePopulator(DatabasePopulator());
return initializer;
}
//Data Source 2
@Bean
public DataSource dataSourceTwo() {
JdbcDataSource ds = new JdbcDataSource();
ds.setUrl("jdbc:h2:mem:app1db;DB_CLOSE_DELAY=-1;MODE=Oracle;TRACE_LEVEL_SYSTEM_OUT=2;INIT=CREATE SCHEMA IF NOT EXISTS app2\;SET SCHEMA app2");
ds.setUser("app2");
ds.setPassword("app2");
return ds;
}
@Bean
public DataSourceInitializer dataSourceInitializerTwo(final DataSource dataSourceTwo) {
final DataSourceInitializer initializer = new DataSourceInitializer();
initializer.setDataSource(dataSourceTwo);
initializer.setDatabasePopulator(databasePopulatorTwo());
return initializer;
}