【问题标题】:Unable to read values from external property file in Spring Boot无法从 Spring Boot 中的外部属性文件中读取值
【发布时间】:2018-06-24 00:59:35
【问题描述】:

我有一个正在运行的 Spring Boot 项目。我想从外部属性文件中读取一些特定于环境的属性。

我在启动服务器时提到了配置文件的名称和位置,如下所示:

java -jar AllergiesConditions.jar --spring.config.name=application,metadata --spring.config.location=classpath:/,/APPS/SpringBoot/

属性文件加载成功(因为我尝试在数据源 bean 中记录一个外部键值并成功打印)但是当我尝试使用 @Value 注释访问一个值时 - 它返回 null。

我的测试类如下:

@Component
public class testclass {
    private Logger logger = LogManager.getLogger(testcla.class);

    @Value("${sso.server}")
    public String sso;

    public void test(){
        logger.info("sso url is: "+sso); //This sso is logged as null
        otherStuff();
    }
}

这个 test() 函数会在服务器运行后调用特定 API 时调用。

外部配置文件 - metadata.properties 包含此变量:

sso.server=1234test

编辑:正如this apparently duplicate question 中所建议的,我还尝试在主应用程序配置类中添加@PropertySource(name = "general-properties", value = { "classpath:path to your app.properties"}),它加载了文件,但我自己仍然得到空值。

有人可以帮忙解决这里出了什么问题吗?测试类是否需要一些特定的注释或者它需要是一个 bean 或其他东西??

在此先感谢 :)

【问题讨论】:

  • 我尝试了上面帖子中建议的解决方案,仍然无法成功!
  • 它不能是null...如果${sso.server} 无法解析,您的应用程序将在启动时中断。这意味着您没有使用托管实例,而是自己创建 testclass 的实例。
  • @M.Deinum 是的,我认为你提供了一些很好的线索。在我的一个控制器中,我只是打电话给testclass obj = new testclass(); obj.test();。如果那是错误的方法,请告诉我如何在我的控制器中调用我的测试类的测试函数。如您所料,如果我在控制器本身内部使用@Value 注释并将其记录到控制器本身,它可以工作!!

标签: spring spring-boot properties-file


【解决方案1】:

感谢 M.Deinum 的大力投入并节省了我的时间

只是发布他的评论作为答案

其实${sso.server} 不能为空。如果${sso.server} 无法解析,我的应用程序将在启动时中断。

所以明显的问题是我正在使用

在我的控制器中创建 testclass 的新实例
testclass obj = new testclass(); obj.test();

我应该通过在我的控制器中自动装配 testclass 来使用 Spring 托管实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 2020-02-14
    • 2015-12-23
    • 2017-10-26
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多