首页 > 解决方案 > springboot 问题从属性文件中读取

问题描述

我正在尝试读取Util类中的属性值。我试过Environment@Value。但它Null为这些领域带来了价值。

@SpringBootApplication
@EnableJpaAuditing
public class EmployeeApplication {

    @PostConstruct
    private void init() {
        System.out.println("AppInitializator initialization logic ...");
        new Util().getTime();
    }

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

public class Util {

    @Autowired
    private Environment env;

    @Value("${defaultTimeFormat}")
    private String defaultTimeFormat;

    public void getTime(){
        System.out.println(defaultTimeFormat);
        System.out.println(env.getProperty("defaultTimeFormat"));
        // method logic here
    }
}

我通过将 Util 作为@Service类并将其依赖项注入EmployeeApplication如下来解决了这个问题。

@SpringBootApplication
@EnableJpaAuditing
public class EmployeeApplication {
    @Autowired
    Util util;

    @PostConstruct
    private void init() {
        System.out.println("AppInitializator initialization logic ...");
        util.getTime();
    }

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


@Service
public class Util {

    @Autowired
    private Environment env;

    @Value("${defaultTimeFormat}")
    private String defaultTimeFormat;

    public void getTime(){
        System.out.println(defaultTimeFormat);
        System.out.println(env.getProperty("defaultTimeFormat"));
        // method logic here
    }
}

但是正确的方法是spring-boot什么?我需要让它Service/Component/Repository从属性文件中读取吗?

标签: spring-bootspring-properties

解决方案


是的,您需要使用@Component其他注释或其中一个注释对类进行注释,以便 Spring Boot 将其实例化。

只有生命周期由 Spring 控制的对象才能获得由 Spring 注入的值,如果添加@Value注释就会发生这种情况。

在应用程序启动期间,Spring 使用您已注释的类的单例实例填充应用程序上下文。@Autowired只有这些类会通过or获得值注入@Value


推荐阅读