当前位置: 首页 > 知识库问答 >
问题:

如何在外部类上加载@ConfigurationProperties?

锺离声
2023-03-14

如果一个bean类来自外部库(例如我自己的commons库),我如何使用ConfigurationProperties填充该bean?

示例:来自公共库:

package com.my.commons.person;

import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotNull;

@Validated
public class CommonPerson {
    private @NotNull String name;
    private @NotNull String age;

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getAge() { return age; }
    public void setAge(String age) { this.age = age; }
}

实施项目:

package com.my.api;

@SpringBootApplication
public class MainApp extends SpringBootServletInitializer {
    @Bean
    @ConfigurationProperties("commons.person")
    public CommonPerson person() {
        return new CommonPerson();
    }
}

application.properties(也仅限于实施项目):

commons.person.name=Dummy
commons.person.age=30

结果:

由于验证异常,应用程序启动失败。o、 s.b.b.PropertiesConfigurationFactory:对象公用空间中的字段错误。字段“name”上的“person”:拒绝的值[null]。。。

顺便说一句:如果我将普通人直接移动到实现项目中,代码就会按预期工作。这只是不工作,如果类来自外部。。。

根据文档,这应该可以工作:@ConfigurationProperties在第三方类上

我正在用maven加载我的commons包:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
    <relativePath/>
</parent>
<dependencies>
    <dependency>
        <groupId>com.my.commons</groupId>
        <artifactId>person-commons</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

共有2个答案

陈渊
2023-03-14

尝试使用...@EnableConfigurationProperties注释启用配置属性支持,它可能会有所帮助。

一些例子和用法解释:1和2

章振
2023-03-14

正如@davidxxx和其他人所指出的,代码本身是正确的。

在我的例子中,问题可能是IDE的一些缓存问题。我只是取出了pom.xml中的公共库,保存并阅读它。这不知何故触发了IDE内部的清理,而mvn净安装没有(因为我之前多次运行这些maven目标)。

 类似资料:
  • 问题内容: 我的问题是该网页未加载到webview中。 启动网络浏览器… 这是我的活动代码: 我在清单中添加了所需的权限: 问题答案: 由于这篇文章,我终于找到了解决方案。这是代码:

  • 问题内容: (此问题与我所见过的许多问题相似,但大多数问题对我的工作不够具体) 背景: 我的程序的目的是使使用我的程序的人可以轻松制作自定义的“插件”,然后将其编译并加载到程序中使用(与在我的程序中实现的不完整,缓慢的解析器相比)。我的程序允许用户将代码输入到预定义的类中,以扩展与我的程序一起打包的已编译类。他们将代码输入到文本窗格中,然后我的程序将代码复制到要重写的方法中。然后,将其保存为(几乎

  • 问题内容: (此问题与我所见过的许多问题相似,但大多数问题对我的工作不够具体) 背景: 我的程序的目的是使使用我的程序的人可以轻松制作自定义的“插件”,然后将其编译并加载到程序中使用(与在我的程序中实现的不完整,缓慢的解析器相比)。我的程序允许用户将代码输入到预定义的类中,从而扩展了与我的程序一起打包的已编译类。他们将代码输入到文本窗格中,然后我的程序将代码复制到被覆盖的方法中。然后,将其保存为(

  • 我将Jetty(8和9)与LZ4压缩一起使用,我想使用LZ4的本机实现,它是C库的本机绑定。为了实现这一点,LZ4类应该用系统类加载器加载。 所以我的问题是,如何用Jetty中的系统类加载器加载一个外部jar。 将lib放入$jetty。home/lib/ext没有帮助,因为它是用扩展类加载器而不是系统加载器加载的。

  • 问题内容: 我有这个模块,它将外部库与其他逻辑一起组成组件,而无需将标签直接添加到index.html中: 我注意到ES6规范是静态的,并且在TypeScript编译期间而不是在运行时进行了解析。 无论如何使其可配置,以便从CDN或本地文件夹加载file.js?如何告诉Angular 2动态加载脚本? 问题答案: 如果使用的是system.js,则可以在运行时使用: 如果您使用的是webpack,

  • 本文向大家介绍JS加载器如何动态加载外部js文件,包括了JS加载器如何动态加载外部js文件的使用技巧和注意事项,需要的朋友参考一下 今天在网上找到了一个可以动态加载js文件的js加载器,具体代码如下: JsLoader.js JsLoader.js测试 测试结果如下: