这听起来像是一个新手问题。我想注入数据源属性(我在运行时获取)并将其注入bean ..
我的javaclass中有一个方法......
public <String,String>map myMethod(Map<String, String> model) {
Map mapA = new HashMap();
mapA.put("username", "element 1");
mapA.put("password", "element 2");
mapA.put("host", "element 3");
return map;
}
我想将这些值注入application-context.xml
中的数据源bean <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value=""/> // inject values here
<property name="url" />
<property name="username" />
<property name="password" />
</bean>
我已经看到很多关于使用属性文件向bean注入值的示例,但我无法弄清楚如何将java类中的值注入bean属性。
由于
答案 0 :(得分:2)
您需要使用@Configuration
注释的方法创建@Bean
类,并返回org.apache.commons.dbcp.BasicDataSource
的实例。
@Configuration
public class DatasourceConfiguration {
@Bean
public BasicDataSource dataSource() {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName(""); // you can call your code here
ds.setUrl(""); // to get these configuration values
ds.setUsername("");
ds.setPassword("");
return ds;
}
}
答案 1 :(得分:0)
这可能是一个不太优雅的解决方案,但这种方法呢?
您可以尝试从方法中返回String
。
@Configuration
public class DatasourceConfiguration2 {
@Bean
public String getDataSourceSetting() {
Map<String, String> map = myMethod(model); //assuming that you are not able to edit the original method
StringBuilder sb = new StringBuilder();
for (Entry<String, String> e : map.entrySet()) {
sb.append(e.getKey()).append('=').append(e.getValue()).append(';');
}
}
}
在xml中,您可以定义属性,如:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="connectionProperties" value="dataSourceSetting"/>
</bean>
基于dbcp api:
将明确添加“user”和“password”属性,因此不需要包含它们。
检查源代码,您可以看到用户和密码是否为空,将打印log("DBCP DataSource configured without a 'username'");
之类的消息。但该物业将在那里提供。
最后,如果url
属性没有选项,则需要明确设置。