中间件小哥
2018-12-03
3243浏览量
最近遇到一些开发者朋友,准备将原有的Java Spring的应用配置迁移到 阿里云应用配置管理 ACM 中。迁移过程中,遇到不少有趣的问题。本文将通过一个简单的样例来还原迁移过程中遇到的问题和相关解决思路,以期达到和读者交流的目的。
这是所有准备迁移配置到配置中心的用户遇到的第一个问题。我们将从时效性和安全这两个维度进行分析。
静态配置是指程序版本一旦发布,基本上不会修改的配置内容,例如:
动态配置是指程序运行时的一些配置变化,通常会影响到程序的一些运行行为,例如:
从时效性的维度来讲,一般建议用户把静态配置存放到自己文件中,尽可能保持简单,但是需要把动态配置放到配置中心里,以加强灵活性和应用动态变更的实效性。
非敏感配置一般指偏向技术类,暴露后不会导致配置上的安全隐患,例如:
敏感配置通常和业务数据相关,一旦泄露将引起安全隐患,例如:
从安全的维度来看,我们通常建议用户把非敏感配置存放到自己的文件中,尽可能保持简单,但是需要把敏感配置放到配置中心里,并加密且做好鉴权,尽量不要让无关人员接触到。
时效性和安全分析总结
使用Spring框架的Java开发者一般经常用到的一种配置注解姿势是利用Spring的@value注解。
例如这个配置,包含两个配置参数,一个是软件的版本号,一个是数据库连接串:
通过@PropertySource和@value的注解来自动注入配置。
@Configuration
@ComponentScan("com.alibaba")
@PropertySource("classpath:myApp.properties")
public class AppConfig {
@Value(value="${url}")
private String URL;
@Value(value="${dbuser}")
private String USER;
@Value(value="${driver}")
private String DRIVER;
@Value(value="${dbpassword}")
private String PASSWORD;
@Value(value="${appVersion}")
private String version;
}
以上代码省略了相关数据库连接初始化等操作。
目前由于安全合规或配置时效等原因,要开始迁移配置到ACM上。经过分析,我们发现部分数据库的配置最好迁移到ACM,以红色字体标注。红色部分将全部被迁移到ACM中。
接下来主要三个改动,先归纳下。
第一步,直接到ACM中创建配置项,名字为myapp.dbconfig.properties,并把配置内容编辑在对应编辑框中。详细操作指南请参见 ACM 快速入门文档,操作截图如下。
第二步,在maven的pom.xml中增加依赖,如下。
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-spring-context</artifactId>
<version>0.2.1- RC1</version>
</dependency>
第三步,在对应AppConfig.java代码中植入API注解,通过ACM去获取动态配置。代码增加部分如红色字体部分。
@Configuration @ComponentScan("com.journaldev")
@PropertySource("classpath:myApp.properties")
@EnableNacosConfig(globalProperties =
@NacosProperties(endpoint = "acm.aliyun.com", namespace = "xxx", accessKey = "xxx", secretKey = "xxx"))
@NacosPropertySource(dataId = "myApp.dbconfig.properties", autoRefreshed = true) public class AppConfig {
@Value(value="${url}") private String URL;
@Value(value="${dbuser}") private String USER;
@Value(value="${driver}") private String DRIVER;
@Value(value="${dbpassword}") private String PASSWORD;
@Value(value="${appVersion}")
private String version; public String getVersion() {
return version;
}
}
至此,改动结束。通过ACM SDK支持Spring的@value注解能力,代码几乎0改动。
在以上代码实例中,有几样事情需要注意:
在代码示例中,使用了明文注解来写死ACM的endpoint, namespace, AK, SK, 等等。在实际操作种,相关变量其实不用写死。
提取密码:gy57
如果您对阿里云应用配置管理 ACM的开源版产品 Nacos 感兴趣,请访问我们的官网网站,或是扫描以下二维码加入我们。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。