spring 框架的xml文件如何读取properties文件数据
第一步:在spring配置文件中
注意:value可以多配置几个properties文件
/db.properties
在src目录下面建立db.properties文件
user=sa
password=sa
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://localhost:1433;databaseName=DB1
在spring的配置文件中通过EL表达式的形式调用
${user}
/db.properties
org.hibernate.dialect.SQLServerDialect
entity/Users.hbm.xml
spring为beans标签提供了profile功能,以便项目的开发和生成环境分离。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:context
=
"http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<
beans
profile
=
"dev,test"
>
<
context:property-placeholder
location
=
"classpath:application.properties"
/>
<
bean
id
=
"dataSource"
class
=
"com.jolbox.bonecp.BoneCPDataSource"
destroy-method
=
"close"
>
<
property
name
=
"driverClass"
value
=
"${db.driver}"
/>
<
property
name
=
"jdbcUrl"
value
=
"${db.url}"
/>
<
property
name
=
"username"
value
=
"${db.username}"
/>
<
property
name
=
"password"
value
=
"${db.password}"
/>
<
property
name
=
"idleConnectionTestPeriodInMinutes"
value
=
"60"
/>
<
property
name
=
"idleMaxAgeInMinutes"
value
=
"240"
/>
<
property
name
=
"maxConnectionsPerPartition"
value
=
"30"
/>
<
property
name
=
"minConnectionsPerPartition"
value
=
"10"
/>
<
property
name
=
"partitionCount"
value
=
"3"
/>
<
property
name
=
"acquireIncrement"
value
=
"5"
/>
<
property
name
=
"statementsCacheSize"
value
=
"100"
/>
<
property
name
=
"releaseHelperThreads"
value
=
"3"
/>
bean
>
<
beans
profile
=
"production"
>
<
context:property-placeholder
ignore-resource-not-found
=
"true"
location
=
"classpath:application.properties,classpath:application-production.properties"
/>
<
bean
id
=
"dataSource"
class
=
"org.springframework.jndi.JndiObjectFactoryBean"
>
<
property
name
=
"jndiName"
value
=
"${db.jndi}"
/>
bean
>
beans
>
beans
>
|
以数据库为例,开发环境使用的是直接将配置写在项目的配置文件里面,而生产环境则使用了jndi。
切换profile可以写在web.xml里面:
1
2
3
4
|
<
context-param
>
<
param-name
>spring.profiles.active
param-name
>
<
param-value
>dev
param-value
>
context-param
>
|
不过得改web.xml,现在一般项目都使用maven来管理,maven也有profile,可以将它们结合起来。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
<
properties
>
<
profile.active
>dev
profile.active
>
properties
><
span
>
span
> <
build
>
<
defaultGoal
>install
defaultGoal
>
<
resources
>
<
resource
>
<
directory
>src/main/resources
directory
>
resource
>
<
resource
>
<
directory
>src/main/resources
directory
>
<
filtering
>true
filtering
>
<
includes
>
<
include
>**/*.properties
include
>
includes
>
resource
>
resources
>
build
>
...
<
profiles
>
<
profile
>
<
id
>dev
id
>
<
activation
>
<
activeByDefault
>true
activeByDefault
>
activation
>
profile
>
<
profile
>
<
id
>test
id
>
profile
>
<
profile
>
<
id
>production
id
>
<
properties
>
<
profile.active
>production
profile.active
>
<
profile.scope
>provided
profile.scope
>
properties
>
profile
>
profiles
span
>
|
mvn install -Pproduction 就是发布生产版本。
然后我们需要在项目里面src resource里面的某个配置文件添加如:
1
|
profile.active=${profile.active}
|
这样maven在编译时会自动设置profile。最后就是设法让spring能够读取到我们的配置。我们的做法是自己实现ContextLoaderListener,里面读取这个properties文件,将spring profiles属性设置为我们需要的值。
1
|
System.setProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, activeProfile);
|
dev
dev
true
src/main/properties/dev-local.properties