我正在使用Spring xml中的以下条目读取属性文件。
<context:property-placeholder
location="classpath:resources/database1.properties,
classpath:resources/licence.properties"/>
我使用 xml 条目或使用@Value
注释将此值注入变量中。
<bean id="myClass" class="MyClass">
<property name="driverClassName" value="${database.driver}" />
<property name="url" value="${database.url}" />
<property name="name" value="${database.name}" />
</bean>
<小时 />我想添加一个新的属性文件( database2.properties
),它与 database1.properties 的变量名称很少。
数据库1.属性:
database.driver=com.mysql.jdbc.Driver
database.url=jdbc:mysql://192.168.1.10/
database.name=dbname
数据库2.属性:
database.url=jdbc:mysql://192.168.1.50/
database.name=anotherdbname
database.user=sampleuser
在两个属性文件中,您都可以看到很少有属性变量具有相同的名称,例如 database.url
、database.name
。
是否可以注入数据库 2.属性的
database.url
?或者我必须更改变量名称?
谢谢。
您可以通过配置两个PropertyPlaceholderConfigurer
来实现。通常只有一个实例提供所有属性,但是,如果您更改placeholderPrefix
则可以使用两个实例,例如
<bean id="firstPropertyGroup" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:resources/database1.properties,
classpath:resources/licence.properties" />
<property name="placeholderPrefix" value="${db1."/>
</bean>
<bean id="secondPropertyGroup" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:resources/database2.properties" />
<property name="placeholderPrefix" value="${db2."/>"
</bean>
然后,您将访问您的属性,例如${db1.database.url}
或${db2.database.url}
可能有一个解决方案,类似于您想要实现的目标。检查此问题的第二个答案:多个属性访问。它基本上解释了要使用另一个表达式(由您定义)访问第二个文件的属性所要执行的操作。 否则,最简单的解决方案就是更改键值(变量名称)。
你迟早会切换到Spring Boot。所以使用Spring Boot,你可以有这样的POJO:
public class Database {
@NotBlank
private String driver;
@NotBlank
private String url;
@NotBlank
private String dbname;
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getDbname() {
return dbname;
}
public void setDbname(String dbname) {
this.dbname = dbname;
}
}
并使用@ConfigurationProperties填充它:
@Bean
@ConfigurationProperties(locations="classpath:database1.properties", prefix="driver")
public Database database1(){
return new Database();
}
@Bean
@ConfigurationProperties(locations="classpath:database2.properties", prefix="driver")
public Database database2(){
return new Database();
}
这样做的缺点是它是可变的。使用龙目岛图书馆,您可以消除讨厌的吸盘手和二传手。