2015-11-30 12 views
8

Il mio progetto Maven avere tre moduli, web, service, commonavvio primavera leggere il file oggetti di diverso modulo di Maven

Alcune parti del mio progetto come questo:

demo-parent: 
    --web 
    --src 
     --main 
     --java 
      --Application.java 
     --resources 
      --application.properties 
      --application-mysql.properties 
    --service 
    --common 
    --src 
     --main 
     --java 
      --ErrorCode.java 
     --resources 
      --application-errors.properties 

Nel web moudle Application.java, voglio leggere i contenuti da common moudle application-errors.properties.

Ecco il mio ErrorCode.java in common:

@Configuration 
@EnableAutoConfiguration 
@EnableConfigurationProperties 
@ConfigurationProperties(locations = "classpath:application-errors.properties") 
public class ErrorCode { 
    private int code; 
    private String message; 

    public int getCode() { 
     return code; 
    } 

    public void setCode(int code) { 
     this.code = code; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 
} 

Perché voglio usare questo application-errors.properties da web modulo, quindi in web moudle, in Application.java:

@SpringBootApplication 
@PropertySources({ 
    @PropertySource("application-mysql.properties"), 
    @PropertySource("application-errors.properties") 
}) 
@EnableConfigurationProperties({ErrorCode.class}) 
public class Application extends SpringBootServletInitializer { 

    public static void main(String[] args) { 
     SpringApplication application = new SpringApplication(Application.class); 
     application.run(args); 
    } 
} 

Ora, aggiungo EnableConfigurationProperties a Application.java che contiene il metodo main e posso ottenere chiave e valore da application-errors.properties f ile, la mia domanda è:

Se voglio richiamare appliction-errors.propertie in altro modulo come il servizio, e il servizio non ho un metodo main, cosa devo fare?

È possibile leggere il file delle proprietà utilizzando la classe java Properties, ma si desidera utilizzare il modo spring.

Qualsiasi consiglio è benvenuto, grazie in anticipo.

+0

Non dovrebbe essere @PropertySource ("classpath: application-mysql.properties") e @PropertySource ("classpath: application-errors.properties") nel modulo Web? –

risposta

4

Invece di accedere a application-error.properties, è possibile collegare automaticamente la classe ErrorCode nei servizi in altri moduli (presupponendo che ErrorCode sia presente nel percorso classe di build di tali servizi).

Definire innanzitutto il componente di configurazione del messaggio di errore.

@Configuration 
@ConfigurationProperties(locations = "classpath:application-error.properties") 
public class ErrorCode { 

    private int code; 
    private String message; 

    public int getCode() { 
     return code; 
    } 

    public void setCode(int code) { 
     this.code = code; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 
} 

filo Auto il componente di configurazione in servizio

@Component 
public class Service { 

    @Autowired 
    private ErrorCode errorCode; 


    public void accessErrorCode() { 
     System.out.println(errorCode.getCode()); //Print code property 
     System.out.println(errorCode.getMessage()); //print message property 
    } 

} 

Abilitazione configurazione automatica in applicazione primavera

@SpringBootApplication 
@EnableAutoConfiguration 
@EnableConfigurationProperties 
public class Application { 

    public static void main(String[] args) { 
     SpringApplication application = new SpringApplicationBuilder(Application.class).web(false).application(); 
     ConfigurableApplicationContext context = application.run(args); 
     Service s = context.getBean(Service.class); 
     s.accessErrorCode(); 
    } 
} 

Come per la Javadocs di EnableConfigurationProperties,

{@link ConfigurationPrope rties} i bean possono essere registrati nel modo standard (per esempio * utilizzando i metodi {@link Bean @Bean}) o, per praticità, possono essere specificati * direttamente su questa annotazione.

Pertanto, tutti i bean definiti con annotazione ConfigurationProperties vengono rilevati nel contesto dell'applicazione e possono essere cablati automaticamente in altri servizi.