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

如何在yml中获得我的配置值-使用dropwizard(微服务)Jersey D.I@Injection?

赏逸春
2023-03-14

这是我的代码片段。

productionServer:
  host: production-server.amazonaws.com
  publicIp: xx.xx.xx.xx
  privateIp: xx.xx.xx.xx
  userName: xx.xx.xx.xx
  password: xx.xx.xx.xx
  remoteFilePath: fake/path/
  fileName: test.txt
  privateKey: private-public-key.ppk

server:
  applicationConnectors:
    - type: http
      port: 8080
    - type: https
      port: 8443
      keyStorePath: key.keystore
      keyStorePassword: password
      validateCerts: false
  adminConnectors:
    - type: http
      port: 8081
    - type: https
      port: 8444
      keyStorePath: key.keystore
      keyStorePassword: password
      validateCerts: false

MyConfiguration类:

import io.dropwizard.Configuration;

public class MyConfiguration extends Configuration{

    @NotNull
    @JsonProperty
    private ProductionServer productionServer;

    // getters

public class ProdctionServer{

      @NotEmpty
      @JsonProperty
      private host;

      @NotEmpty
      @JsonProperty
      private publicIp;

      // getters

应用程序类:

import io.dropwizard.Application;

public class MyApplication extends Application<MyConfiguration> {

    public static void main(String[] args) throws Exception{
        new MysApplication().run(args);
    }

    @Override
    public String getName(){ return "micro-service"; }

    @Override
    public void initialize(Bootstrap<MyConfiguration> bootstrap){}

    @Override
    public void run(MyConfiguration conf, Environment environment ){
        final MyResource myResource = new MyResource();
        // health check

        // environment.healthChecks().register("template",healthCheck);

        System.out.println( "==> " + conf );
        System.out.println( "==> " + conf.getProductionServer() );

        // register
        environment.jersey().register( MyResource );

并且在运行此应用程序时:

==> MyConfiguration{server=DefaultServerFactory{applicationConnectors=[io.dropwizard.jetty.HttpConnectorFactory@623e088f, io.dropwizard.jetty.HttpsConnectorFactory@39fcbef6], adminConnectors=[io.dropwizard.jetty.HttpConnectorFactory@34f22f9d, io.dropwizard.jetty.HttpsConnectorFactory@77d67cf3], adminMaxThreads=64, adminMinThreads=1, applicationContextPath=/, adminContextPath=/}, logging=DefaultLoggingFactory{level=INFO, loggers={}, appenders=[io.dropwizard.logging.ConsoleAppenderFactory@663411de]}}
==> com.mycompany.myproject.model.ProductionServer@5b04476e

DependencyBinder.Class

导入org.glassfish.hk2.utilites.binding.abstractbinder;

公共类DependencyBinder扩展AbstractBinder{

@Override
protected void configure() {
    bind(MyConfiguration.class).to(MyConfiguration.class);
    bind(MyService.class).to(MyService.class);
}
public class MyService {

    @Inject
    MyConfiguration conf;

    public void invoke(){
        System.out.println( "=============================== " );
        System.out.println( "==> " + conf );
        System.out.println("==> " + conf.getProductionServer() );
    }
=============================== 
==> MyConfiguration{server=DefaultServerFactory{applicationConnectors=[io.dropwizard.jetty.HttpConnectorFactory@34e82c4d], adminConnectors=[io.dropwizard.jetty.HttpConnectorFactory@19b70fbd], adminMaxThreads=64, adminMinThreads=1, applicationContextPath=/, adminContextPath=/}, logging=DefaultLoggingFactory{level=INFO, loggers={}, appenders=[io.dropwizard.logging.ConsoleAppenderFactory@543f81c9]}}
==> null

共有1个答案

丁安宜
2023-03-14

问题是,这种配置

bind(MyConfiguration.class).to(MyConfiguration.class);

HK2将创建MyConfiguration的新实例。它将不是由DW填充的同一实例。但是,您可以做的是使用由DW创建的实例,只需在HK2配置中绑定相同的实例

public class MyApplication extends Application<MyConfiguration> {

    @Override
    public void run(final MyConfiguration config, Environment env) {
        env.jersey().register(new AbstractBinder() {
            @Override
            protected void configure() {
                bind(config).to(MyConfiguration.class);
            }
        });
    }
}
 类似资料:
  • 问题内容: 这是我的代码段。 这是我的yml文件: MyConfiguration类: 应用类别: 并且在运行该应用程序时: 我收到了如下日志: 表示成功获得了Yaml的价值。但是我的问题是在MyConfiguration类的DI或依赖项注入期间。尽管对象MyConfiguration在我的服务中似乎不为空,但我无法获得ProductionServer的值。 这是我绑定MyService.clas

  • 我是新来的。我想知道他们的任何其他方法来设置连接端口,管理端口,记录器级别和所有配置参数,而不是通过使用。YML 文件。

  • 我们的项目中使用的是Spring Cloud config server,它有多个微服务。配置服务器就绪后,我们现在将所有微服务的所有属性存储在一个中央git存储库中。每个微服务能够根据应用程序名称和配置文件提取自己的属性文件。我们试图将资源包存储在中央存储库中,并让config-server将这些资源包提供给微服务。我们的资源包包括属性文件,如messages_en.properties、mes

  • 我使用Netflix的Eureka注册了许多微服务,并且我正在使用Spring Cloud Config。但是,当我更新时,我需要重新启动应用程序以应用新属性。 重新启动应用程序有点烦人,所以我搜索了它,发现通过使用Netflix Eureka获得注册的微服务,并使用spring boot actuator刷新它,但我没有获得注册的微型服务。 简而言之:我如何使用网飞尤里卡注册微服务?

  • 还有什么方法可以让spring cloud配置客户端的应用程序。yml从spring配置服务器读取值?例如,在我的spring cloud config客户端上,应用程序。yml就是这样 还有我的引导程序。yml文件如下所示 对于服务url值,对于不同的环境,我必须配置不同的eureka url值,我的问题是,我是否可以在配置服务器中配置服务url值?就像我在应用程序中将值设置为${service

  • 有人能帮我吗?我想将SpringSleuth与我的SpringBoot微服务集成。我添加了依赖项。也尝试添加SLF4J与它一起。但它是打印普通日志。没有以侦探风格打印,如应用程序名称、span id、traceid等。我不确定它是否识别依赖关系?我需要添加任何其他依赖项吗?有属性文件吗? 你能指导准确的依赖性吗?以及具体的配置步骤?