我有这些档案,uat纽约,uat ldn。uat-nyc数据源是oracle,uat-ldn是mysql服务器。此配置在application-uat-nyc.yml和application-uat-ldn.yml中设置
我有以下配置类
@Profile({"uat-nyc", "uat-ldn"})
@Configuration
@EnableConfigurationPropeties(DatSourceProperties.class)
public class DataSourceConfig{
private DataSourceProperties properties; // server, username, password are set here
DataSource getDataSource(){// gets datasource based on profiles}
}
如果我的应用程序使用spring.profiles.active:uat-nyc、uat-ldn运行,它会创建两个数据源吗?
一个配置来自uat nyc,另一个配置来自uat ldn
我在下面有一个函数,在这个函数中,我从第三方服务获取数据,根据ldn或nyc的不同,我需要持久保存到ldn或nyc数据库中。如何使下面的if-else部分动态?我如何在下面的getproducts方法的if-else部分中获得各自的数据源,即ldn和nyc?
class Product{
String name;
int price;
int region;
}
@Component
Class ProductLoader{
JdbcTemplate jdbcTemplate;
public ProductLoader(DataSource ds){
jdbcTemplate = new JdbcTemplate(ds);
}
public void getProducts(){
List<Product> products = // rest service to get products
if(Product product : product){
if(product.getRegion().equals("LONDON"){
//write to LONDON datbase
// How can I get ldn datasource here?
}
if else(product.getRegion().equals("NewYork"){
//write to NewYork datbase
How can I get NewYork datasource here?
}
else{
// Unknown location
}
}
}
}
问题:-
如果我的应用程序使用spring.profiles.active:uat-nyc、uat-ldn运行,它会创建两个数据源吗?
如何将数据源动态注入productloader,并为ldn和nyc使用特定的数据源
1条答案
按热度按时间ctehm74n1#
第一次您需要告诉spring您将使用两个数据源,它们将由context spring管理。在@configuration类上使用@bean,然后使用@autowired来声明spring管理的变量。
您可以使用@qualifier来选择和限定您的bean
属性设置
在服务上使用