ecco i frammenti di codice.come ottenere i valori di configurazione in yml - utilizzando dropwizard (microservice) Jersey D.I @ Injection?
ecco il mio file 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
classe 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
classe Application:
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);
e durante l'esecuzione di questa applicazione:
ho ricevuto un collegato come 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]
significa che si ottiene correttamente il valore del mio yaml. ma il mio problema è durante l'iniezione D.I o dipendenza della classe MyConfiguration. non riesco a ottenere il valore del mio ProductionServer sebbene Object MyConfiguration non sia nullo nel mio servizio.
Ecco il mio frammento di codice di dipendenza vincolante del MyService.class e la MyConfiguration.class
DependencyBinder.class
import org.glassfish.hk2.utilities.binding.AbstractBinder;
public class DependencyBinder estende 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());
}
e durante l'invocazione del metodo invoke() ... ho ottenuto un collegato come segue:
===============================
==> MyConfiguration{server=DefaultServerFactory{applicationConnectors=[[email protected]], adminConnectors=[[email protected]], adminMaxThreads=64, adminMinThreads=1, applicationContextPath=/, adminContextPath=/}, logging=DefaultLoggingFactory{level=INFO, loggers={}, appenders=[[email protected]]}}
==> null
ora il mio problema è durante il DI o dipendenza inec zione della classe MyConfiguration in MyService.class. non riesco a ottenere il valore del mio ProductionServer sebbene Object MyConfiguration non sia nullo nel mio servizio. per favore dammi qualche risoluzione? thnx.