Spring @Configuration类包含@Bean方法,但是如何首先执行init()?

时间:2018-11-27 17:52:19

标签: java spring spring-boot encryption jasypt

我正在从事Spring项目,并且具有Spring的1级技能。 我已经阅读了两天,并试图使Jasypt加密与某些现有代码一起使用,但是传递的值是需要转换的ENC(....)值。

我要看的一个项目是一个使用main()的自运行项目,而我所在的项目是一个被调用但不能与另一个运行的服务。

我上次查看此示例Spring EnableEncryptableProperties with Jasypt,但过了一会儿我注意到它正在使用方法调用来提取其属性:     environment.getRequiredProperty(“ spring.datasource.username”)

该方法是从System变量中提取的,我看不出属性如何进入其中。系统属性级别中没有我的属性文件中的所有属性。

关于如何使用application.properties文件中的内容更新系统属性,我这里想念什么?

另一个项目正在更新系统属性,然后调用SpringApplication.run(Application.class, args),这不适用于另一个项目,因为它不是同一类型的应用程序。

会喜欢一些指导。请不要聪明地讲课。我正在做我可以做的事,但是在步骤4,而项目在步骤321,要到那儿还要花一点时间。

1 个答案:

答案 0 :(得分:0)

如果要在实际创建Spring之前执行一些代码,可以使用实现自定义的 BeanFactoryPostprocessor 。以下是 EnvironmentPostProcessor 的示例,该示例对于使用加密属性的情况可能非常有用:   example

您可以通过以下方式实现 postProcessEnvironment

  • 从环境中获取所有道具
  • 检查属性值是否具有“ ENC()”
  • 解密并重新设置其值

我相信jasypt-starter的EncrytablePropertySource可以这样工作。

P。 S。如果可能,最好将默认方法与@EncrytablePropertySource一起使用,而不是使用自定义EnvironmentPostProcessor重新发明轮子。