springboot修改配置文件的数据库连接密码

原创
2020/04/09 10:42
阅读数 3.8K

1、springboot的版本号是2.0.5;

配置文件是yml格式的,文件名为application.yml;

snakeyaml的版本为snakeyaml-1.19.jar。

2、需求:把配置文件里password的换成加密后的值,加密算法不限。

3、方案:在启动类的main方法开头,将password的值取出来,解密,然后再保存到application.yml文件中,具体代码如下:

public static void main(String[] args) throws Exception {

		String path = Application.class.getClassLoader().getResource("application.yml").getPath();
		//windows系统路径中带有盘符,需要把开头的斜杠去掉
		if(path.indexOf(":")>-1){
			path = path.substring(1);
		}
		//System.out.println("path=" + path);
		try{
			Yaml yaml  = new Yaml();
			File file = new File(path);
			Map<String,Object> map = yaml.load(new FileInputStream(file));
			Map<String,Object> m2 = (Map<String,Object>) map.get("spring");
			Map<String,Object> m3 = (Map<String,Object>) m2.get("datasource");
			String pw = m3.get("password")+"";
			//System.out.println("pw=" + pw+"=");
            //JasyptUtil为自己定义的加密解密工具类
			//System.out.println("pw 明文=" + JasyptUtil.DecodeJasypt(pw)+"=");
			m3.put("password", JasyptUtil.DecodeJasypt(pw));
			FileWriter fw = new FileWriter(path);
			yaml.dump(map, fw);
			fw.close();
		}catch(Exception e){
			e.printStackTrace();
		}
		SpringApplication.run(Application.class, args);
	
	}

4、以上修改方法,对于在IDE环境中运行有效,但对于打包后的jar,则通过path无法得到输入流和输出流。解决方案:把application.yml文件放到jar包外部,比如和jar同级目录,则此时:

String path = System.getProperty("user.dir")+File.separator + "application.yml";

然后在执行jar包的时候指定配置文件路径,如:

java -jar XXX.jar --spring.config.path=application.yml

5、解密后,新的配置文件里已经变成了明文,解决方法:在项目跑起来之后,再把密文写到外部配置文件里,可以根据实际项目启动时间,估算数据库配置信息读取之后,再写回密文。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部