访问application.yaml文件中的gradle环境变量

ozxc1zmp  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(147)

我有一个spring Boot 应用程序,我想从gradle.properties中插入一个变量到我的application.yaml文件中我在gradle.properties中有这个文件

version=2521.2442

我想把这个变量存储在我的application.yaml文件中作为spring安全密码

spring:
 security : 
  user: 
   name: admin
   password : admin${version}

但当我启动我的应用程序和打印值的密码我有这个错误

**原因:java.lang.IllegalArgumentException:无法解析值“admin${version}"中的占位符”version“**我的代码如下所示

@EnableSwagger2
@EnableAsync
@EnableScheduling
@EnableJpaRepositories
@SpringBootApplication(scanBasePackages = {"com.wombatscorp.confluence.usermacro"})
@ConfigurationPropertiesScan("com.wombatscorp.confluence.usermacro")
public class AddonApplication {

    @Value("${spring.security.user.password}")
    private String password;

    public static void main(String[] args) throws Exception {
        new SpringApplication(AddonApplication.class).run(args);
    }

    @PostConstruct
    private void password() {
        System.out.println("Password : " + password);
    }
}

因此,我的问题是如何使其工作,并在application.yaml文件中使用gradle.properties中的version变量

0dxa2lsx

0dxa2lsx1#

这里的关键是gradle.properties中定义的属性没有转换成spring-boot可以通过外部配置找到属性的形式(环境变量就是这样一种形式)。
要演示这一点,请给定您提供的gradle.properties文件和以下Gradle任务:

// build.gradle.kts
tasks.register("demo") {
  doLast {
    println("Environment variable version  = '${System.getenv("version")}'") // will be null
    println("Gradle project properties version = '${properties["version"]}'") // will be the value supplied in gradle.properties
  }
}

但是,您可以转换gradle.properties中提供的属性,并将它们作为环境变量提供给运行spring-boot应用程序的Java进程,如下所示:

// build.gradle.kts
tasks.bootRun {
  systemProperty("version", properties["version"])
}

我还应该指出,如果您的build.gradle.kts还指定了version,则将属性命名为version可能会有点问题。例如,start.spring.io生成的默认Gradle构建:

// build.gradle.kts
// the rest has been omitted for clarity
group = "com.example"
version = "0.0.1-SNAPSHOT"

将采用上面指定的版本(0.0.1-SNAPSHOT),而不是gradle.properties中指定的版本

相关问题