@Service
@Scope("singleton")
public class OneKeyConfig {
private Long key;
@DisconfItem(key = "absurd-app-rd-1")
public Long getKey() {
return key;
}
}
静态配置
@DisconfFile(filename = "config1.properties")
public class OneStaticConfig {
private static Long uid;
private static String username;
private static String password;
@DisconfFileItem(name = "uid", associateField = "uid")
public static Long getUid() {
return uid;
}
@DisconfFileItem(name = "username", associateField = "username")
public static String getUsername() {
return username;
}
@DisconfFileItem(name = "password", associateField = "password")
public static String getPassword() {
return password;
}
}
当项目达到一定程度,配置五花八门这时候配置中心的便派上了用场。
方案1 maven打包
如果只是要区分开发环境和上线环境的配置,只要打包的时候吧不同文件环境打包进来就ok了 maven举例
或
方案2 spring profiles
spring为beans标签提供了profile功能,以便项目的开发和生成环境分离。 参考:https://my.oschina.net/yybear/blog/113755 spring boot 不再赘述http://blog.csdn.net/he90227/article/details/52981747
方案3 Spring Cloud Config Server
maven依赖
服务端
配置文件application.properties
(git)
(svn)
feign-consumer-dev.properties
http://localhost:7001/feign-consumer/dev/master
或 http://localhost:7001/master/feign-consumer-dev.yml
或 http://localhost:7001/master/feign-consumer-dev.properties
客户端调用(bootstrap.properties)
下面这种写法也是可以的。
另外,他还提供了很多方式来满足需求。比如,修改了配置后,可以
来刷新配置。
项目地址:https://github.com/www1350/springclouddemo 官方:https://github.com/spring-cloud/spring-cloud-config
方案4 Disconf
disconf-web安装
安装依赖软件
打开disconf-web文件夹
注意,记得执行将application-demo.properties复制成application.properties: cp application-demo.properties application.properties
上线前的初始化工作 初始化数据库: 可以参考 sql/readme.md 来进行数据库的初始化。注意顺序执行
里面默认有6个用户(请注意线上环境删除这些用户以避免潜在的安全问题)
如果想自己设置初始化的用户名信息,可以参考代码来自己生成用户: src/main/java/com/baidu/disconf/web/tools/UserCreateTools.java
部署War 修改server.xml文件,在Host结点下设定Context:
并设置端口为 8015 启动Tomcat,即可。 部署 前端 修改 nginx.conf
关于host 这里的 host 设置成 localhost (可以自定义),但它 必须与 application.properties 里的domain一样。 然后浏览器的访问域名也是这个。
新建app
新建配置项
新增配置文件
以config1.properties举例:
客户端
引入
基于xml的分布式配置 第一步:撰写配置文件
第二步:撰写disconf.properties
第三步:撰写配置类 以config1.properties举例:
上面这种写法是托管配置,通过简单的注解类方式 托管配置。托管后,本地不需要此配置文件,统一从配置中心服务获取。
当配置被更新后,注解类的数据通过
@Service
实现自动同步。变量分布式配置
静态配置
配置更新的通知
实现IDisconfUpdate 接口的reload方法,注意这里此类必须是JavaBean,Spring托管的,且 “scope” 都必须是singleton的。 添加 @DisconfUpdateService 注解,classes 值加上 OneConfig.class ,表示当 JedisConfig.class 这个配置文件更新时,此回调类将会被调用。或者,使用 confFileKeys 也可以。
当然也可以单独抽出来写一个类
基于xml配置
可以自动reload
如果有
<context:property-placeholder location="classpath*:properties/*.properties"/>
必须去掉否则会报错不可以自动reload
过滤要进行托管的配置
忽略哪些分布式配置,用逗号分隔
示例代码如下: https://github.com/www1350/disconfig-demos