在springboot中处理配置文件的一些实践

455 阅读2分钟

​ 我们都知道在线上,内测 ,开发环境中会运用到不同的配置文件环境,操作账号权限也不同,一旦我们在使用时候没有注意自己的环境有可能改变了别的环境的内容,将会很难得到更正,通常情况下我们并不需要去处理线上数据,所以在这种情况下,实现了一种比较简单方式,相同的jar包放在哪个环境就是哪个环境,并不需要单独打包。

​ 在这里,我移除了 spring中 resources文件里配置文件,使得资源文件中空空如也,这得益于Spring框架提供了PropertySource注解。

​ @PropertySource 主要为我们提供了加载指定属性文件的功能,在此注解中主要提供了五个方法

//名称
String name() default "";
//资源文件路径
String[] value();
//是否忽略不存在的文件
boolean ignoreResourceNotFound() default false;
//编码方式
String encoding() default "";
// 读取对应资源文件的工厂类
Class<? extends PropertySourceFactory> factory() default PropertySourceFactory.class;

在使用中通常以value来查找属性资源文件,在src的java doc中提供两种example :‘classpath:/com/myco/app.properties’和"file:/path/to/file.xml"

我们架构使用了模块化管理方式

 -base
 -sys
 -db
 -admin
 -pay
 -job

在实践中我们在sys,db ,admin,base的每一个包目录中提供一个class来读取配置文件 例如

//demo1
@Component
@PropertySource(value{"file:${spring_config}/db.properties"})
class DbPropertySource{
    
}
// demo2
@Component
@PropertySource(value{"file:${spring_config}/sys.properties"})
class SysdbPropertySource{
    
}

在此之前我们首先要配置电脑的environment 例如: spring_config = /usr/config,配置电脑环境变量就不做过多详解;

在db.properties中我们只需要配置数据库连接的属性,这样做的方式是因为可以避免在admin或sys在写一次类似的配合并且不好维护,并且可以抽离配置属性,在base中写一些通用的配置文件,在sys中只需要写sys需要的配置文件,在db中编写数据库配置,在admin中维护后台服务器的相关配置文件

例如,以下是db.properties 部分配置属性粘贴

# mysql
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test_db
spring.datasource.username=root
spring.datasource.password=admin
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=15
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=DatebookHikariCP
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1

#redis
spring.redis.host=127.0.0.1
spring.redis.port=9379
spring.redis.password=klfsh20190517
spring.redis.database=1

#mongo
spring.data.mongodb.uri=mongodb://admin:admin@127.0.0.1:3701/test_db
spring.data.mongodb.connections-per-host=20
spring.data.mongodb.threads-allowed-to-block-for-connection-multiplier=10
spring.data.mongodb.connect-timeout=5000
spring.data.mongodb.socket-timeout=3000
spring.data.mongodb.max-wait-time=1500
spring.data.mongodb.auto-connect-retry=true
spring.data.mongodb.socket-keep-alive=true
spring.data.mongodb.prepare.maxConnectionIdleTime=60000
spring.data.mongodb.prepare.maxConnectionLifeTime=0

​ 这是一种比较简单的方式实现了相同jar包可以运用在不同环境的一种方案,当然并不是认为这是一种很好的解决方案,也许利用配置中心等手段可以更好的去处理,但是由于现有企业大小局限性,并不需要使用过于复杂场景使用到的技术去处理,所以寻找了该方式去处理了配置文件,这样可以隐藏部分线上配置文件,让开发工程师们专注于开发和测试,也给企业数据带来安全性,