如何将 Java Class 中的值注入 spring 中的数据源 Bean
How to inject values from Java Class to Datasource Bean in spring
这听起来像是一个新手问题。我想注入数据源属性(我在运行时获取)并将其注入 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;
}
我想将这些值注入到应用程序中的数据源 bean-context.xml
<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 class 向 bean 属性注入值。
谢谢
您需要创建一个 @Configuration
class,其中的方法带有 @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;
}
}
这可能是一个不太优雅的解决方案,但是这种方法呢?
您可以尝试从您的方法中 return 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:
The "user" and "password" properties will be added explicitly, so they do not need to be included here.
检查源代码,你可以看到如果用户名和密码为空,将打印一条类似 log("DBCP DataSource configured without a 'username'");
的消息。但是 属性 将在那里可用。
最后,如果是url
属性,没有选项,需要明确设置。
这听起来像是一个新手问题。我想注入数据源属性(我在运行时获取)并将其注入 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;
}
我想将这些值注入到应用程序中的数据源 bean-context.xml
<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 class 向 bean 属性注入值。
谢谢
您需要创建一个 @Configuration
class,其中的方法带有 @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;
}
}
这可能是一个不太优雅的解决方案,但是这种方法呢?
您可以尝试从您的方法中 return 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:
The "user" and "password" properties will be added explicitly, so they do not need to be included here.
检查源代码,你可以看到如果用户名和密码为空,将打印一条类似 log("DBCP DataSource configured without a 'username'");
的消息。但是 属性 将在那里可用。
最后,如果是url
属性,没有选项,需要明确设置。