java - 无论 Spring 数据源 URL 是在哪里指定的,如何读取它的值?

标签 java spring spring-boot

在 Spring Boot 文档中,它指出命令行上提供的以 -- 开头的值将转换为系统属性。

https://docs.spring.io/spring-boot/docs/1.5.19.RELEASE/reference/htmlsingle/#boot-features-external-config-command-line-args

By default SpringApplication will convert any command line option arguments (starting with ‘--’, e.g. --server.port=9000) to a property and add it to the Spring Environment.

mvn spring-boot:run -Drun.arguments="-task report:weekly,--spring.datasource.url=jdbc:mysql://xx.xx.us-east-1.rds.amazonaws.com:3306/xx"

我发现这不是真的。我尝试打印数据源值,所有三个都返回 null

    System.out.println(System.getenv("SPRING_DATASOURCE_URL"));
    System.out.println(System.getProperty("SPRING_DATASOURCE_URL"));
    System.out.println(System.getProperty("spring.datasource.url"));
    System.exit(1);

null
null
null

如何获取数据源的值,特别是主机的值,无论数据源是在属性文件中、在命令行上还是通过环境变量提供?

最佳答案

有一个类org.springframework.core.env.Environment这是 Spring 对从不同来源接收的所有属性的抽象,默认情况下包括 systemPropertiessystemEnvironment .

为了获取属性,请注入(inject)Enviroment并调用Enviroment#getProperty :

var property = environment.getProperty("spring.datasource.url");

关于java - 无论 Spring 数据源 URL 是在哪里指定的,如何读取它的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54524863/

相关文章:

java - 理解@Enable...注解并发

spring - 如何使用 Kotlin 在 Spring Test 类中注入(inject)服务组件?

Java动态创建实例变量的对象数组

java - 如何检查列表中的元素是否相同?

java - Spring Autowiring 不适用于lazy-init

java - 用于@RequestParam 和 Spring Data REST 的 Spring Converter<S, T>

jquery - Spring Boot Dandelion 数据表 Thymeleaf 日期之间的搜索

Java:强制基类使用基类方法而不是重写方法

java - Ant:以编程方式创建 JUnit 报告任务

spring - 有没有办法在我的 spring 应用程序中启动内存中的 redis