Oto moje fragmenty kodu.jak zdobyć moje wartości konfiguracyjne w yml - używając dropwizard (microservice) Jersey D.I @Injection?
oto mój plik yml:
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
klasa 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
klasa Zastosowanie:
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);
i podczas uruchamiania tej aplikacji:
Otrzymałem zalogowany jako foll ows:
==> MyConfiguration{server=DefaultServerFactory{applicationConnectors=[[email protected], [email protected]], adminConnectors=[[email protected], [email protected]], adminMaxThreads=64, adminMinThreads=1, applicationContextPath=/, adminContextPath=/}, logging=DefaultLoggingFactory{level=INFO, loggers={}, appenders=[[email protected]]}}
==> [email protected]
oznacza, że z powodzeniem otrzymuje wartość mojego yaml. , ale mój problem jest podczas D.I lub wstrzyknięcia zależności klasy MyConfiguration. nie mogę uzyskać wartości mojego serwera ProductionServer, chociaż obiekt MyConfiguration w mojej usłudze nie jest pusty.
oto mój kod urywek zależność wiązania MyService.class i MyConfiguration.class
DependencyBinder.class
import org.glassfish.hk2.utilities.binding.AbstractBinder;
public class DependencyBinder rozciąga AbstractBinder {
@Override
protected void configure() {
bind(MyConfiguration.class).to(MyConfiguration.class);
bind(MyService.class).to(MyService.class);
}
MyService.class
public class MyService {
@Inject
MyConfiguration conf;
public void invoke(){
System.out.println("=============================== ");
System.out.println("==> " + conf);
System.out.println("==> " + conf.getProductionServer());
}
i podczas powołując się na invoke() metoda ... Mam zalogowany następująco:
===============================
==> MyConfiguration{server=DefaultServerFactory{applicationConnectors=[[email protected]], adminConnectors=[[email protected]], adminMaxThreads=64, adminMinThreads=1, applicationContextPath=/, adminContextPath=/}, logging=DefaultLoggingFactory{level=INFO, loggers={}, appenders=[[email protected]]}}
==> null
teraz mój problem jest podczas DI lub zależność injec klasy MyConfiguration w MyService.class. nie mogę uzyskać wartości mojego serwera ProductionServer, chociaż obiekt MyConfiguration w mojej usłudze nie jest pusty. proszę dać mi jakieś rozwiązanie? thnx.