如何创建你的bean并要求Spring Boot向其中注入值?
就像是
@Bean@ConfigurationProperties("ds.client1")public DataSource dataSourceClient1() { DataSourceBuilder.create().build();}@Bean@ConfigurationProperties("ds.client2")public DataSource dataSourceClient2() { DataSourceBuilder.create().build();}
然后,
ds.client1名称空间中的任何设置都属于第一个数据源(即
ds.client1.password该数据源的密码
DataSource)。
但是,也许你不知道将拥有多少数据源?这变得越来越复杂,尤其是当你需要将那些动态数据源注入其他对象时。如果只需要按名称查找它们,则可以将它们自己注册为单例。这是一个有效的例子
@ConfigurationProperties(prefix = "ds")public class DataSourceSettings implements BeanFactoryAware { private List<String> clients = new ArrayList<>(); private BeanFactory beanFactory; public List<String> getClients() { return clients; } public void setClients(List<String> clients) { this.clients = clients; } @Override public void setBeanFactory(BeanFactory beanFactory) { this.beanFactory = beanFactory; } @PostConstruct public void configure() { Map<String, String> clientDataSources = new HashMap<String, String>(); for (String client : clients) { // extract client name String[] parts = client.split("\|"); String clientName = parts[0]; String url = parts[1]; // client to datasource mapping String dsName = url.substring(url.lastIndexOf("/") + 1); if (clientName.contains(",")) { // multiple clients with same datasource String[] clientList = clientName.split(","); for (String c : clientList) { clientDataSources.put(c, url); } } else { clientDataSources.put(clientName, url); } } Assert.state(beanFactory instanceof ConfigurableBeanFactory, "wrong bean factory type"); ConfigurableBeanFactory configurableBeanFactory = (ConfigurableBeanFactory) beanFactory; for (Map.Entry<String, String> entry : clientDataSources.entrySet()) { DataSource dataSource = createDataSource(entry.getValue()); configurableBeanFactory.registerSingleton(entry.getKey(), dataSource); } } private DataSource createDataSource(String url) { return DataSourceBuilder.create().url(url).build(); }}
请注意,这些bean 仅可通过bean名称查找获得。让我知道是否适合你。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)