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

Microprofile-使用JPA配置自定义ConfigSource

子车雅珺
2023-03-14

我目前正在尝试设置一个从DB2读取配置值的自定义configSource。由于ConfigSources是通过ServiceLoader加载的,因此看起来没有办法通过JPA访问数据库,因为ServiceLoader很早就在扫描自定义ConfigSources。

有什么想法吗?

共有1个答案

慕项明
2023-03-14

您可以将ConfigSource作为一个单例会话bean,并将其标记为在应用程序启动序列期间进行急切初始化。此外,您还需要定义一个静态成员变量来保存您的配置值。

通过此设置,您可以从注入的JPA源或任何其他CDI或EJB延迟加载属性值。

请参阅下面的示例代码

@Startup
@Singleton
public class MyConfigSource implements ConfigSource {

    public static final String NAME = "MyConfigSource";
    public static Map<String, String> properties = null; // note to use static here!

    @PersistenceContext(unitName = ".....")
    private EntityManager manager;

    @PostConstruct
    void init() {
        // load your data from teh JPA source or EJB
        ....
    }

    @Override
    public int getOrdinal() {
        return 890;
    }

    @Override
    public String getValue(String key) {
        if (properties != null) {
            return properties.get(key);
        } else {
            return null;
        }
    }

    @Override
    public String getName() {
        return NAME;
    }

    @Override
    public Map<String, String> getProperties() {
        return properties;
    }

}

ConfigSources是POJO的,因为如果CDI bean期望在启动时根据依赖于CDI的ConfigSources将配置注入其中,那么您可能会遇到启动循环问题。

因此,示例CongigSoruce构造了两次--一次是从Config-API开始的,一次是从@PostConstruct上的CDI实现的。使用静态变量'properties',我们重载已经构造的ConfigSource中的值。当然,如果您愿意,您也可以将代码分隔在两个类中。

 类似资料:
  • 我想在运行时选择.properties文件。Microprofile-config有可能吗?因此,我想使用一个外部文件,而不是使用meta-inf/microprofile-config.properties: 我知道,编写自定义配置源是可能的,但我想知道是否有一个内置选项来定义配置文件,从而避免在每个项目中重复代码

  • 我目前正在寻找一种动态组装config-keys(回退处理)的方法,然后在我们的microprofile-config.properties文件中查找这些。这样的文件可能如下所示: 因此,当存在客户和子客户时,使用on 我得到这个问题的原因是我想使用注释,所以没有ConfigProvider.getConfig()。这意味着我必须在自定义的中组装动态配置键。 我知道ConfigSources是在服

  • 然而,解析Config引用仍然不能解决我在这一点上读取meta-inf/microprofile-config.properties内容的问题,即使稍后在@startup bean的执行过程中,它得到了正确的解析。为什么注射的行为不同?我用的是官方的野蝇19图像。 编辑:主要问题是在查找属性时忽略了microprofile-config.properties的内容

  • MOSN 自定义配置说明。 本文是对 MOSN 自定义配置的说明。 Duration String 字符串,由一个十进制数字和一个时间单位后缀组成,有效的时间单位为 ns、us(或?s)、ms、s、m、h,例如 1h、3s、500ms。 metadata metadata 用于 MOSN 路由和 Cluster Host 之间的匹配。 { "filter_metadata":{ "mo

  • 如果你想自定义 Next.js 的高级配置,可以在根目录下新建next.config.js文件(与pages/ 和 package.json一起) 注意:next.config.js是一个 Node.js 模块,不是一个 JSON 文件,可以用于 Next 启动服务已经构建阶段,但是不作用于浏览器端。 // next.config.js module.exports = { /* config

  • Gitea 引用 custom 目录中的自定义配置文件来覆盖配置、模板等默认配置。 如果从二进制部署 Gitea ,则所有默认路径都将相对于该 gitea 二进制文件;如果从发行版安装,则可能会将这些路径修改为Linux文件系统标准。Gitea 将会自动创建包括 custom/ 在内的必要应用目录,应用本身的配置存放在 custom/conf/app.ini 当中。在发行版中可能会以 /etc/g