前言
在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置文件来完成比如jdbc连接信息,邮件服务器信息,接口地址及版本信息等等。但读取*.properties文件有N多种方式,本文根据我工作中用到的读取properties配置文件的方法小小总结一下,主要叙述的是spring读取配置文件的方法。
设置配置文件
例如jdbc连接信息:
mariadb.config.url=jdbc:mariadb://192.168.216.129:3306/config?useUnicode=true?characterEncoding=utf-8
mariadb.config.username=root
mariadb.config.password=root@mariadb
mariadb.config.driverClass=org.mariadb.jdbc.Driver
mariadb.config.env=dev
mariadb.config.override=true
mariadb.config.appId=spring_config
spring启动加载配置文件
配置文件位置 src\main\resources\properties\config.properties
方式一
加载方式
<!--读取配置文件:方法一 -->
<!--
<context:property-placeholder
location="属性文件,多个之间逗号分隔"
file-encoding="文件编码"
ignore-resource-not-found="是否忽略找不到的属性文件"
ignore-unresolvable="是否忽略解析不到的属性,如果不忽略,找不到将抛出异常"
properties-ref="本地Properties配置"
local-override="是否本地覆盖模式,即如果true,那么properties-ref的属性将覆盖location加载的属性,否则相反"
system-properties-mode="系统属性模式,默认ENVIRONMENT(表示先找ENVIRONMENT,再找properties-ref/location的),NEVER:表示永远不用ENVIRONMENT的,OVERRIDE类似于ENVIRONMENT"
order="顺序"
/>
-->
<context:property-placeholder location="classpath:/properties/jdbc.properties" file-encoding="utf-8" ignore-unresolvable="true"/>
应用方式
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driver}"/>
<property name="jdbcUrl" value="${url}"/>
<property name="user" value="${username}"/>
<property name="password" value="${password}"/>
<!-- c3p0 私有配置 -->
<property name="maxPoolSize" value="30"/>
<property name="minPoolSize" value="10"/>
<!-- 关闭连接不自动提交 -->
<property name="autoCommitOnClose" value="false"/>
<!--获取连接超时时间-->
<property name="checkoutTimeout" value="1000"/>
<!--当获取连接失败,重试次数-->
<property name="acquireIncrement" value="2"/>
</bean>
代码应用方式
@Component
public class ConfigBean2 {
@Value("${my.email}")
private String email;
@Value("${my.qq}")
private Integer qq ;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getQq() {
return qq;
}
public void setQq(Integer qq) {
this.qq = qq;
}
@PostConstruct
public void init(){
System.out.println("ConfigBean2======================"+email+qq) ;
}
}
方式二
配置方式
<!--java中获取配置文件属性 配套使用 ConfigBean.java-->
<bean id="config" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<array>
<value>classpath:/properties/config.properties</value>
</array>
</property>
</bean>
使用方式
@Component
public class ConfigBean {
@Value("#{config.name}")
private String name ;
@Value("#{config.age}")
private Integer age ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@PostConstruct
public void init(){
System.out.println("ConfigBean======================"+name+age) ;
}
}
代码应用
@Autowired
private ConfigBean configBean ;
方式三
只提供一种思路。
随着项目越来越大,有些配置项越来越多,管理起来很不方便,这时候将配置文件放置再数据库就是一种很好的解决办法。当服务启动时去数据库读取加载在内存中,供服务运行期间使用。而项目只放数据库连接信息。
实现大致思路。
配置文件配置数据库信息
mariadb.config.url=jdbc:mariadb://192.168.216.129:3306/config?useUnicode=true?characterEncoding=utf-8
mariadb.config.username=root
mariadb.config.password=root@mariadb
mariadb.config.driverClass=org.mariadb.jdbc.Driver
mariadb.config.env=dev
mariadb.config.override=true
mariadb.config.appId=spring_config
- #### spring配置文件配置如下
<bean id="propertyConfigurer" class="com.hsy.java.util.jdbc.PropertyConfig">
<property name="locations">
<list>
<value>classpath*:/properties/config.properties</value>
</list>
</property>
<!-- 是否加载插件。当为false或者没有配置configList都视为不加载插件读取配置-->
<property name="loadPlugin" value="true" />
<property name="configList">
<list>
<ref bean="jdbcConfigHelper"/>
</list>
</property>
<property name="ignoreUnresolvablePlaceholders" value="true" />
<property name="ignoreResourceNotFound" value="true"/>
<property name="fileEncoding" value="utf-8"/>
</bean>
<bean id="jdbcConfigHelper" class="com.hsy.java.util.jdbc.JdbcConfigHelper">
<!-- 排除的key,这些key自己加载 -->
<property name="excludeKeys">
<set>
<value>name</value>
<value>age</value>
</set>
</property>
</bean>
代码实现暂不赘述
有需要代码的可以去我的github上去clone
github源码地址