是否可以根据springboot中application.properties中的前缀创建多个bean

问题描述 投票:1回答:2

我在springboot应用程序的application.properties中有以下内容(1.5.4.RELEASE)

my.prefix.one.id=id01
my.prefix.one.name=one

my.prefix.two.id=id02
my.prefix.two.name=two

还有一个如下的课程

public class MyClass{
 private String id;
 private String name;
 //getters and setters
}

如果我使用@ConfigurationProperties(prefix =“my.prefix.one”),那么我得到一个id字段为“id01”的MyClass bean。

有没有办法指示springboot扫描扫描所有带有前缀“my.prefix”的属性并创建多个bean。在这种情况下,两个bean - 具有id字段“id01”的bean和具有id字段“id02”的bean?

java spring spring-boot
2个回答
0
投票

你应该使用spring qazxsw poi并在你的qazxsw poi中使用嵌套类

@ConfigurationProperties

然后你就可以像访问它一样

MyClass

最好的办法是通过@ConfigurationProperties(prefix="my.prefix") public class MyClass{ private One id01; private Two id02; //GETTER SETTER public static class One { private String id; // GETTER SETTER } public static class Two { private String id; // GETTER SETTER } } 阅读


更新:OP不想使用嵌套类来检索这些字段

myClass.getOne().getId();

现在你可以使用它们了

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-typesafe-configuration-properties

0
投票

由于您使用的是弹簧靴,您还可以:

    @ConfigurationProperties(prefix="my.prefix")
    public class MyClass{
      private String id01;
      private String id02;

      @NotNull
      private One one;
      @NotNull
      private Two two;

      public getId01(){
        return one.id;
      }
      public getId02(){
        return two.id;
      }

      public static class One {
        private String id;
        // GETTER SETTER
      }

      public static class Two {
        private String id;
        // GETTER SETTER
      }
    }

我不知道有任何有意义的方法来避免配置单个bean。

但是,如果您真的想要这样做,您可以访问ApplicationContext并手动处理属性并将bean注入Applicationcontext,我个人更喜欢将多个bean方法添加到配置类而不是直接操作ApplicationContext。

© www.soinside.com 2019 - 2024. All rights reserved.