Java Spring@Component未正确读取.properties字段

Java Spring@Component未正确读取.properties字段,java,spring,spring-boot,Java,Spring,Spring Boot,我有几个@Configuration类,它们指定自定义@ConfigurationProperties(“sample”),并在中用于实例化几个bean,这些bean稍后将用于我的业务逻辑类 然而,我一直在尝试使用一个内部的@组件类来实现这种方法,所以我不需要在现有的特定或通用配置中使用它,然后看看会发生什么 @Component @ConfigurationProperties("myclass") public class MyClass { private String at

我有几个
@Configuration
类,它们指定自定义
@ConfigurationProperties(“sample”)
,并在中用于实例化几个bean,这些bean稍后将用于我的业务逻辑类

然而,我一直在尝试使用一个内部的
@组件
类来实现这种方法,所以我不需要在现有的特定或通用配置中使用它,然后看看会发生什么

@Component
@ConfigurationProperties("myclass")
public class MyClass  {

     private String attribute;        

     (Constructor, getters and setters for attribute and other methods...)

}
在我的
application.properties
文件中,我将属性值指定为
myclass.attribute=value


这样做每次都会导致空值。
@Component
是否接受reading.properties文件,或者该文件是否仍在
@Configuration
类中?

即使在用
@Component
注释的类中使用
@ConfigurationProperties
,一切都正常工作。请尝试:

application.properties:

myclass.attribute=value
myclass.attribute=foo
MyClass类:

@Data
@Component
@ConfigurationProperties("myclass")
public class MyClass {
    private String attribute;
}
测试等级:

@RunWith(SpringRunner.class)
@SpringBootTest
public class FooTests {

    @Autowired
    private MyClass myClass;

    @Test
    public void test() {
        System.out.println(myClass.getAttribute());
    }
}

您确实需要在配置类(例如应用程序类)上添加
@EnableConfigurationProperties
注释

@SpringBootApplication
@EnableConfigurationProperties
public class MySpringBootApp {
    public static void main(String[] args) {
        SpringApplication.run(MySpringBootApp.class);
    }
}

我从未使用过
@ConfigurationProperties
注释,但是如果您想从
应用程序中的值设置属性。properties
我建议使用
@value
注释:

application.properties:

myclass.attribute=value
myclass.attribute=foo

这样,
MyClass
的每个实例都将具有
属性
,默认值为
foo

,我应该将其作为注释。但我不希望有人错过这件小事

好的,问题是-您缺少“$”(美元符号)。想知道为什么没人注意到

在属性文件中,如果您有以下内容:

myclass.attribute=value
然后,要在任何类中访问它,请执行以下操作:

@Value("${myclass.attribute}")

注意到上面的$符号了吗?

您是否将
@EnableConfigurationProperties
添加到了您的一个配置类中?是的@daniu,该符号在一个始终实例化的基本配置中启用了它们。只需添加
@Value(“myclass.attribute”)
?同样的故事@dehasi,仍然获取空值。请尝试使用@propertySource(“classpath:application.properties”)和@value(“myclass.attribute”)到目前为止运气不佳,与以前的“nul”相同。我还尝试在使用变量的地方(在定义变量的类中)启动服务设置断点。@Data符号是什么?找不到包含它的包。它是用于用此批注替换getter和setter的lombok库。使用该批注时的情况相同,为null值。这也不起作用,仍然为null。我一定错过了一些冲突。