【Spring之配置propertie资源文件】Maven整合spring profiles功能配置propertie资源文件更灵活、简单

spring 框架的xml文件如何读取properties文件数据

第一步:在spring配置文件中

  注意:value可以多配置几个properties文件

<bean id="propertyConfigurer"
              class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
              <property name="locations">
                     <list>
                            <value>/db.properties</value>
                           
                     </list>
              </property>
       </bean>

第二步:

  在src目录下面建立db.properties文件

user=sa
password=sa
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://localhost:1433;databaseName=DB1

第三步:

  在spring的配置文件中通过EL表达式的形式调用 

 ${user}

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
 
       <bean id="propertyConfigurer"
              class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
              <property name="locations">
                     <list>
                            <value>/db.properties</value>
                           
                     </list>
              </property>
       </bean>
 
       <bean id="datasource"
              class="org.springframework.jdbc.datasource.DriverManagerDataSource">
              <property name="driverClassName"
                     value="${driver}">
              </property>
              <property name="url"
                     value="${url}">
              </property>
              <property name="username" value="${user}"></property>
              <property name="password" value="${password}"></property>
       </bean>
       <bean id="sessionFactory"
              class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
              <property name="dataSource">
                     <ref bean="datasource" />
              </property>
              <property name="hibernateProperties">
                     <props>
                            <prop key="hibernate.dialect">
                                   org.hibernate.dialect.SQLServerDialect
                            </prop>
                     </props>
              </property>
              <property name="mappingResources">
                     <list>
                            <value>entity/Users.hbm.xml</value>
                     </list>
              </property>
       </bean>
       <bean id="UsersDAO" class="dao.UsersDAO">
              <property name="sessionFactory">
                     <ref bean="sessionFactory" />
              </property>
       </bean>
 
</beans>



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></ 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);

实际环境,也如此:

<profiles>
		<profile>
			<id>dev</id>
			<properties>
				<profile.id>dev</profile.id>
			</properties>
			<!-- 配置POM.xml配置资源文件,可根据测试、线上都不同环境指向相应资源文件,这种方式替换了直接在applicationContext中配置。 -->
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
			<build>
				<filters>
					<filter>
						src/main/properties/dev-local.properties
					</filter>
				</filters>
			</build>
		</profile>
</profiles>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值