文档章节

Spring 如何读取properties文件内容

binhu
 binhu
发布于 2015/01/21 14:23
字数 737
阅读 262
收藏 0

Spring中config属性文件的读取与使用 PropertyPlaceholderConfigurer 注解@Component

1.配置文件:/WEB-INF/configInfo.properties
配置文件内容:
email.host = www.94gleaner.com
email.port = xxx
email.username = gleaner
email.password = xxx
email.sendFrom = 94gleaner@94gleaner.com

2.Spring容器启动时,使用内置bean对属性文件信息进行加载,在bean.xml中添加如下:

<!– spring的属性加载器,加载properties文件中的属性   方案①-->
<bean id=”propertyConfigurer” class=”org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”>
property name=”location”>
<value>/WEB-INF/configInfo.properties</value>
</property>
<property name=”fileEncoding” value=”utf-8″ />
</bean>

<!--或者通过如下方式加载       方案②-->
<context:property-placeholder location="classpath:ldap.properties" ignore-unresolvable="true"/>



    <!-- 将多个配置文件读取到容器中,交给Spring管理 -->  
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="locations">  
           <list>  
              <!-- 这里支持多种寻址方式:classpath和file -->  
              <value>classpath:/opt/demo/config/demo-db.properties</value>  
              <!-- 推荐使用file的方式引入,这样可以将配置和代码分离 -->  
              <value>file:/opt/demo/config/demo-mq.properties</value>  
              <value>file:/opt/demo/config/demo-remote.properties</value>  
            </list>  
        </property>  
    </bean>

3.其它bean中引用,例:

<property name="host">
       <value>${email.host}</value>
</property>
<property name=”port”>
       <value>${email.port}</value>
</property>

4.JAVA代码中获取方法:创建ConfigInfo.java

@Component("configInfo")
public class ConfigInfo {
@Value("${email.host}")
private String host;
@Value("${email.port}")
private String port;
public String getHost() {
return host;
}
public String getPort() {
return port;
}
}

5.代码中调用

@Autowired
private ConfigInfo configInfo;
public byte[] Test(HttpServletResponse response) {
string host = configInfo.getHost();
}

 

 

 

config.properties配置文件信息

Properties代码  收藏代码

##数据库(mysql|mssql|oracle...)  

environment=mysql  

jdbc.driver=com.mysql.jdbc.Driver  

jdbc.url=jdbc:mysql://127.0.0.1:3306/portal?useUnicode=true&characterEncoding=utf8  

jdbc.user=root  

jdbc.password=root  

#初始化连接(根据实际访问量设置大小)  

jdbc.initialSize=10  

#最大空闲连接(根据实际访问量设置大小)  

jdbc.maxIdle=50  

#最小空闲连接(根据实际访问量设置大小)  

jdbc.minIdle=10  

#最大连接数量(根据实际访问量设置大小)  

jdbc.maxActive=200  

 Spring配置信息(截取部分)

Xml代码  收藏代码

<context:property-placeholder location="classpath:config.properties" />  

  <!--创建jdbc数据源 -->  

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  

  <property name="driverClassName" value="${jdbc.driver}"/>  

 <property name="url" value="${jdbc.url}"/>  

<property name="username" value="${jdbc.user}"/>  

 <property name="password" value="${jdbc.password}"/>  

 <property name="initialSize" value="${jdbc.initialSize}"/>  

<property name="maxIdle" value="${jdbc.maxIdle}"/>  

 <property name="minIdle" value="${jdbc.minIdle}"/>  

<property name="maxActive" value="${jdbc.maxActive}"/>  

 <property name="removeAbandoned" value="true"/>    

  <property name="removeAbandonedTimeout" value="120"/>  

  <property name="maxWait" value="3000"/>  

</bean>  

<!-- 创建SqlSessionFactory,同时指定数据源 -->  

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  

   <property name="dataSource" ref="dataSource"/>  

  <property name="configLocation" value="classpath:mybatis-config.xml"/>  

  <property name="mapperLocations" value="classpath*:com.anly.portal.*.mapper/*Mapper.xml" />   

</bean>  

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  

  <!-- 此处扫描的是Mapper接口 -->  

 <property name="basePackage" value="com.anly.portal.*.mapper"/>  

<property name="sqlSessionFactory" ref="sqlSessionFactory"/>  

</bean>  

 此时,启动会报异常,${jdbc.driver}这样的表达式获取不到properties里面的值,因为MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了,解决的办法如下:

 

方法一:

修改<property name="sqlSessionFactory" ref="sqlSessionFactory"/>为<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>

原理:使用sqlSessionFactoryBeanName注入,不会立即初始化sqlSessionFactory, 所以不会引发提前初始化问题。

 

方法二:

直接删掉<property name="sqlSessionFactory" ref="sqlSessionFactory"/>

注意:在没有配置这一行时,必须配置一个以sqlSessionFactory命名的org.mybatis.spring.SqlSessionFactoryBean。

© 著作权归作者所有

上一篇: Spring注解
下一篇: Spring控制器注解
binhu
粉丝 20
博文 209
码字总数 205648
作品 0
合肥
私信 提问
加载中

评论(0)

Spring入门-读取properties文件内容&Spring表达式使用

Spring可以直接读取properties属性文件,读取里面的配置信息,一般这个文件保存数据库连接相关的内容,另外再简单了解下Spring表达式获取bean属性信息。 读取properties文件内容 使用xml配置...

osc_e61ersei
2019/08/12
5
0
属性文件——Java&Spring

属性文件 什么是属性文件 ? 定义:一个扩展名为properties文件,属性文件都是以key-value(键值对)来保存文件的内容,如:log4j.properties,db.properties等。 oracle.driverClassName=oracl...

osc_0ltyoebk
2019/10/06
2
0
【开发笔记】- Java读取properties文件的五种方式

原文地址:https://www.cnblogs.com/hafiz/p/5876243.html 一、背景   最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不...

osc_z7d2bxvl
2019/01/30
7
0
10分钟搞定 SpringBoot 如何优雅读取配置文件?

本文以及收录自springboot-guide(不只是SpringBoot还有Spring重要知识点),地址:https://github.com/Snailclimb/springboot-guide 。让你学习 Spring 变的更加容易!如果觉得不错的话,欢迎去...

Guide哥
03/31
0
0
Spring读取配置文件 @Value

最近在学习Spring如何读取配置文件,记录下方便自己也方便别人;   大致分为两类吧,一种的思路是利用Spring的beanFactoryPostProcessor读取配置文件内容到内存中,也就是应用程序的某个对...

osc_mpdk2b71
2019/01/15
2
0

没有更多内容

加载失败,请刷新页面

加载更多

QEMU、KVM、libvirt三者间的关系

QEMU QEMU提供了一个开源的服务器全虚拟化解决方案,它可以使你在特定平台的物理机上模拟出其它平台的处理器,比如在X86 CPU上虚拟出Power的CPU,此时的Guest OS感觉不到虚拟机的存在,就像运行在...

osc_7ludm6s2
20分钟前
15
0
QEMU和KVM的关系

KVM是指在CPU硬件支持基础之上的虚拟化技术。没有CPU硬件虚拟化的支持,KVM是无法工作的。 准确来说,KVM是Linux的一个模块。可以用modprobe去加载KVM模块。加载了模块后(kvm和kvm-intel模块...

osc_3ytpwpyb
21分钟前
9
0
thymeleaf语法(二)

<span th:if="$(user.age) eq 23"></span> 运算符: gt  :great than  (大于)  > ge  :great equal  (大于等于)  >= eq  :equal  (等于)  = lt  :less than  (小于) ......

osc_nt0jrqne
23分钟前
7
0
送给发烧友:Python条件语句的七种写法T

有的人说 Python 入门容易,但是精通难的语言,这点我非常赞同。Python 语言里有许多(而且是越来越多)的高级特性,是 Python 发烧友们非常喜欢的。在这些人的眼里,能够写出那些一般开发者...

osc_0kdyznad
24分钟前
17
0
人物-企业家:车建新

ylbtech-人物-企业家:车建新 车建新 ,男,1966年6月18日生于江苏省常州市,红星美凯龙家居集团股份有限公司(Red Star Macalline Group Corporation Ltd.)董事长兼CEO,并担任全国工商联执...

osc_z2ru77w0
26分钟前
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部