【问题标题】:How to fetch spring.datasource.username correctly from application.yml如何从 application.yml 正确获取 spring.datasource.username
【发布时间】:2020-11-13 13:58:18
【问题描述】:

我一直在做一个需要使用application.yml进行配置的spring-boot项目

application.yml 文件位于目录src/main/resources 下。

这是文件的内容:

spring:
  main:
    banner-mode: off
  application:
    name: XX
  datasource:
    username: admin
    password: 1234
    driverClassName: XXXX
    url: XXXX

在配置类中,每个字段都有变量。

@Component
@ConfigurationProperties
public class GlobalConfig {

    private String name;
    private String username;
    private String password;
    private String driverClassName;
    private String url;


    // getters&setters

这是运行文件:

@SpringBootApplication
@Configuration
@PropertySource("application.yml")
@EnableConfigurationProperties
public class Application implements CommandLineRunner {

    private GlobalConfig globalConfig;

    @Autowired
    public void setGlobalConfig(GlobalConfig globalConfig) {
        this.globalConfig = globalConfig;
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void run(String... args) {
        System.out.println(globalConfig);
    }

虽然应用程序username字段中的所有其他变量都是正确的,但有一些与操作系统的用户相关的内容。

预期 toString -> GlobalConfig{name='XX', username='admin', password='1234', driverClassName='XXX', url='XXX'}

实际toString -> GlobalConfig{name='XX', username='user', password='1234', driverClassName='XXX', url='XXX'}

PS:字母X 表示其为空。他们已经有人了!

我已经检查了一些类似的问题,但这个案例没有答案。

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 如何从application.yml 文件中填充GlobalConfig
  • 我已经更新了问题并添加了跑步者文件。我一直在使用CommandLineRunner

标签: spring spring-boot yaml


【解决方案1】:

如果不从 yaml 文件中填充数据,则不应打印 Object。

您可以使用“Setter”或“construction”注入。 (您需要将所有数据填充到 POJO 对吗?)

For Ex (Setter Injection)-

@PropertySource("classpath:application.properties")
@Component
public class GlobalConfig {

 private String name;

    @Autowired
    public void setName(@Value("${user.name}") String name) {
        this.name=name;
    }
//getter
}

application.properties:-

user.name=约翰逊

然后 autowire GlobalConfig n 打印对象 System.out.println(globalConfig);

【讨论】:

  • POJO 正在自动填充。这个问题不要求你回答。还是谢谢。
  • 自动是什么意思?我看不到您在此处填写的日期。您只是使用 CommandLineRunner 调用空对象。
  • 不,它们不为空。他们已经住满了。问题是其中一个字段填充不正确。有冲突,这实际上是主要问题。请再次阅读问题。
猜你喜欢
  • 1970-01-01
  • 2019-11-23
  • 2017-05-29
  • 1970-01-01
  • 2020-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
相关资源
最近更新 更多