您可以在您的项目中创建一个配置,该配置将构建一个注释为@Primary
bean的新数据源。这个新的数据源将是datasource1
,它将在春季注入新的数据源工厂方法。这里有你的工作示例。
的配置:
@SpringBootApplication
public class BeanSpringExampleApplication
{
@Bean(name = "dataSource1")
public FakeDataSource dataSource1()
{
return new FakeDataSource("dataSource1");
}
@Bean(name = "dataSource2")
public FakeDataSource dataSource2()
{
return new FakeDataSource("dataSource2");
}
@Bean
@Primary
public FakeDataSource primaryDataSource(
@Qualifier("dataSource1") FakeDataSource dataSource1)
{
return dataSource1;
}
}
这里你可以看到三种豆(使用FakeDataSource
类),模拟你的情况。这个primaryDataSource
bean工厂方法只返回dataSource1
(它仅仅是一个数据源选择器)。
的FakeDataSource
只是一个占位符,使例子可以运行:
public class FakeDataSource
{
private final String fakeProperty;
public FakeDataSource(String id)
{
fakeProperty = id;
}
/**
* @return the fakeProperty
*/
public String getFakeProperty()
{
return fakeProperty;
}
}
最后,它证明了一切测试工作:
@RunWith(SpringRunner.class)
@SpringBootTest
public class BeanSpringExampleApplicationTests
{
@Autowired
private FakeDataSource fakeDataSource;
@Test
public void should_AutowirePrimaryDataSource() throws Exception
{
assertEquals("dataSource1", fakeDataSource.getFakeProperty());
}
}
你能在项目中创建一个新的数据源豆并注入你的'datasource1'作为参数?然后,你可以用'@ Primary'注释这个方法,并简单地返回'datasource1'。请让我知道,如果我明白你的问题。 –
@MikeWojtyna我试过了,但它不起作用。我得到消息说我有两个bean,Spring不能决定使用哪一个。 –
使用@Qualifier来区分您的bean并命名您的主要bean。我会尽力为你准备一个有用的例子。 –