2015-05-12 13 views
9

sto usando Spring Booot MVC 1.2.2.RELEASE. Ho il mio progetto multi-modulo che è strutturata in questo modo:unire molti file application.properties invece di sostituire su Spring Boot?

example-backend-development(parent) 
---> example-backend-development-domain 
---> example-backend-development-service 

voglio fare entrambi i moduli indipendenti, o almeno dominio dal servizio, dal momento che il servizio ha il modulo di dominio nel suo percorso di classe. Quindi entrambi i moduli hanno il loro file application.properties nella rispettiva cartella delle risorse. Voglio farlo in questo modo perché non voglio gestire tutte le proprietà dal modulo di servizio (ad esempio, proprietà Jpa, che appartiene al modulo di dominio).

Così, per esempio ho questa application.properties nel modulo di servizio

logging.level.org.springframework.web: DEBUG 
logging.level.org.hibernate: ERROR 
logging.level.com.example.movies: DEBUG 

E questo nel modulo dominio

spring.datasource.driverClassName=com.mysql.jdbc.Driver 
spring.datasource.url=jdbc:mysql://localhost:3306/sarasa_db 
spring.datasource.username=root 
spring.datasource.password=mypassword 

spring.jpa.hibernate.ddl-auto=update 
spring.jpa.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect 
spring.jpa.show-sql=true 

Il problema è che quando avvio il mio servizio, in quanto entrambi applicazione .properties si trovano nel percorso di classe del servizio, quindi sostituiscono i servizi application.properties con l'altro dal dominio. E voglio unirli se hanno lo stesso nome, come in questo caso. Qui i registri primaverili (DEBUG + INFO)

:: Spring Boot ::  (v1.2.2.RELEASE) 

2015-05-12 15:06:24.794 DEBUG 7728 --- [   main] o.s.w.c.s.StandardServletEnvironment  : Adding [servletConfigInitParams] PropertySource with lowest search precedence 
2015-05-12 15:06:24.797 DEBUG 7728 --- [   main] o.s.w.c.s.StandardServletEnvironment  : Adding [servletContextInitParams] PropertySource with lowest search precedence 
2015-05-12 15:06:24.798 DEBUG 7728 --- [   main] o.s.w.c.s.StandardServletEnvironment  : Adding [systemProperties] PropertySource with lowest search precedence 
2015-05-12 15:06:24.798 DEBUG 7728 --- [   main] o.s.w.c.s.StandardServletEnvironment  : Adding [systemEnvironment] PropertySource with lowest search precedence 
2015-05-12 15:06:24.798 DEBUG 7728 --- [   main] o.s.w.c.s.StandardServletEnvironment  : Initialized StandardServletEnvironment with PropertySources [servletConfigInitParams,servletContextInitParams,systemProperties,systemEnvironment] 
2015-05-12 15:06:24.840 INFO 7728 --- [   main] c.e.movies.service.ApplicationRunner  : Starting ApplicationRunner on despubuntu-ThinkPad-E420 with PID 7728 (/home/despubuntu/Documents/Workspace/example-backend-development/example-backend-development/example-backend-development-service/target/classes started by despubuntu in /home/despubuntu/Documents/Workspace/example-backend-development/example-backend-development/example-backend-development-service) 
2015-05-12 15:06:24.841 DEBUG 7728 --- [   main] c.e.movies.service.ApplicationRunner  : Running with Spring Boot v1.2.2.RELEASE, Spring v4.1.6.RELEASE 
2015-05-12 15:06:24.915 INFO 7728 --- [   main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot[email protected]55782201: startup date [Tue May 12 15:06:24 ART 2015]; root of context hierarchy 
2015-05-12 15:06:25.034 DEBUG 7728 --- [   main] o.s.w.c.s.StandardServletEnvironment  : Adding [class path resource [application.properties]] PropertySource with lowest search precedence 
2015-05-12 15:06:25.083 DEBUG 7728 --- [   main] o.s.w.c.s.StandardServletEnvironment  : Replacing [class path resource [application.properties]] PropertySource with [class path resource [application.properties]] 
2015-05-12 15:06:26.033 INFO 7728 --- [   main] o.s.b.f.s.DefaultListableBeanFactory  : Overriding bean definition for bean 'beanNameViewResolver': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]] 
2015-05-12 15:06:26.753 DEBUG 7728 --- [   main] o.s.w.c.s.StandardServletEnvironment  : Adding [applicationConfig: [classpath:/application.properties]] PropertySource with search precedence immediately lower than [applicationConfigurationProperties] 
2015-05-12 15:06:26.753 DEBUG 7728 --- [   main] o.s.w.c.s.StandardServletEnvironment  : Removing [applicationConfigurationProperties] PropertySource 
2015-05-12 15:06:26.753 DEBUG 7728 --- [   main] o.s.w.c.s.StandardServletEnvironment  : Removing [defaultProperties] PropertySource 
2015-05-12 15:06:27.178 INFO 7728 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.datasource.CONFIGURATION_PROPERTIES' of type [class org.springframework.boot.autoconfigure.jdbc.DataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2015-05-12 15:06:27.179 INFO 7728 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration' of type [class org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2015-05-12 15:06:27.473 INFO 7728 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'dataSource' of type [class org.apache.tomcat.jdbc.pool.DataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2015-05-12 15:06:27.474 INFO 7728 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'com.example.movies.domain.config.PersistenceConfiguration' of type [class com.example.movies.domain.config.PersistenceConfiguration$$EnhancerBySpringCGLIB$$1afe0f6c] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2015-05-12 15:06:27.665 INFO 7728 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [class org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$8c497c14] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2015-05-12 15:06:27.812 INFO 7728 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'transactionAttributeSource' of type [class org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2015-05-12 15:06:27.823 INFO 7728 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'transactionInterceptor' of type [class org.springframework.transaction.interceptor.TransactionInterceptor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2015-05-12 15:06:27.827 INFO 7728 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.config.internalTransactionAdvisor' of type [class org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2015-05-12 15:06:28.350 INFO 7728 --- [   main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http) 
2015-05-12 15:06:28.737 INFO 7728 --- [   main] o.apache.catalina.core.StandardService : Starting service Tomcat 
2015-05-12 15:06:28.739 INFO 7728 --- [   main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.0.20 
2015-05-12 15:06:28.873 INFO 7728 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]  : Initializing Spring embedded WebApplicationContext 
2015-05-12 15:06:28.873 DEBUG 7728 --- [ost-startStop-1] o.s.web.context.ContextLoader   : Published root WebApplicationContext as ServletContext attribute with name [org.springframework.web.context.WebApplicationContext.ROOT] 
2015-05-12 15:06:28.873 INFO 7728 --- [ost-startStop-1] o.s.web.context.ContextLoader   : Root WebApplicationContext: initialization completed in 3962 ms 
2015-05-12 15:06:29.077 DEBUG 7728 --- [ost-startStop-1] o.s.w.c.s.StandardServletEnvironment  : Adding [servletConfigInitParams] PropertySource with lowest search precedence 
2015-05-12 15:06:29.077 DEBUG 7728 --- [ost-startStop-1] o.s.w.c.s.StandardServletEnvironment  : Adding [servletContextInitParams] PropertySource with lowest search precedence 
2015-05-12 15:06:29.078 DEBUG 7728 --- [ost-startStop-1] o.s.w.c.s.StandardServletEnvironment  : Adding [systemProperties] PropertySource with lowest search precedence 
2015-05-12 15:06:29.078 DEBUG 7728 --- [ost-startStop-1] o.s.w.c.s.StandardServletEnvironment  : Adding [systemEnvironment] PropertySource with lowest search precedence 
2015-05-12 15:06:29.079 DEBUG 7728 --- [ost-startStop-1] o.s.w.c.s.StandardServletEnvironment  : Initialized StandardServletEnvironment with PropertySources [servletConfigInitParams,servletContextInitParams,systemProperties,systemEnvironment] 
2015-05-12 15:06:29.132 DEBUG 7728 --- [ost-startStop-1] o.s.w.c.s.StandardServletEnvironment  : Adding [servletConfigInitParams] PropertySource with lowest search precedence 
2015-05-12 15:06:29.132 DEBUG 7728 --- [ost-startStop-1] o.s.w.c.s.StandardServletEnvironment  : Adding [servletContextInitParams] PropertySource with lowest search precedence 
2015-05-12 15:06:29.133 DEBUG 7728 --- [ost-startStop-1] o.s.w.c.s.StandardServletEnvironment  : Adding [systemProperties] PropertySource with lowest search precedence 
2015-05-12 15:06:29.133 DEBUG 7728 --- [ost-startStop-1] o.s.w.c.s.StandardServletEnvironment  : Adding [systemEnvironment] PropertySource with lowest search precedence 
2015-05-12 15:06:29.133 DEBUG 7728 --- [ost-startStop-1] o.s.w.c.s.StandardServletEnvironment  : Initialized StandardServletEnvironment with PropertySources [servletConfigInitParams,servletContextInitParams,systemProperties,systemEnvironment] 
2015-05-12 15:06:29.746 INFO 7728 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/] 
2015-05-12 15:06:29.751 INFO 7728 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 
2015-05-12 15:06:29.751 INFO 7728 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 
2015-05-12 15:06:29.781 DEBUG 7728 --- [ost-startStop-1] o.s.web.filter.HiddenHttpMethodFilter : Initializing filter 'hiddenHttpMethodFilter' 
2015-05-12 15:06:29.781 DEBUG 7728 --- [ost-startStop-1] o.s.web.filter.HiddenHttpMethodFilter : Filter 'hiddenHttpMethodFilter' configured successfully 
2015-05-12 15:06:29.787 DEBUG 7728 --- [   main] o.s.w.c.s.StandardServletEnvironment  : Replacing [servletContextInitParams] PropertySource with [servletContextInitParams] 
2015-05-12 15:06:29.857 INFO 7728 --- [   main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default' 
2015-05-12 15:06:31.701 INFO 7728 --- [   main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot[email protected]55782201: startup date [Tue May 12 15:06:24 ART 2015]; root of context hierarchy 
2015-05-12 15:06:31.770 DEBUG 7728 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Looking for request mappings in application context: org.springframework.boot[email protected]55782201: startup date [Tue May 12 15:06:24 ART 2015]; root of context hierarchy 
2015-05-12 15:06:31.780 INFO 7728 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/v3/clients],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<com.example.movies.api.models.response.ClientResponseDTO> com.example.movies.service.controller.ClientController.postClient(com.example.movies.api.models.request.ClientRequestDTO) throws com.example.movies.domain.exception.ValidationException 
2015-05-12 15:06:31.780 INFO 7728 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/v3/clients/{clientId}],methods=[PUT],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<com.example.movies.api.models.response.ClientResponseDTO> com.example.movies.service.controller.ClientController.putClient(com.example.movies.api.models.request.ClientRequestDTO,java.lang.String) throws com.example.movies.domain.exception.ValidationException 
2015-05-12 15:06:31.780 INFO 7728 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/v3/clients],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<com.example.movies.domain.feature.commons.model.PaginatedResponse<com.example.movies.api.models.response.ClientResponseDTO>> com.example.movies.service.controller.ClientController.getClients(com.example.movies.api.models.request.model.PagingRequestDTO) throws com.example.movies.domain.exception.ValidationException 
2015-05-12 15:06:31.781 INFO 7728 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/v3/clients/{clientId}],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<com.example.movies.api.models.response.ClientResponseDTO> com.example.movies.service.controller.ClientController.getClient(java.lang.String) throws com.example.movies.domain.exception.ValidationException 
2015-05-12 15:06:31.781 INFO 7728 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/v3/clients/{clientId}],methods=[DELETE],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public void com.example.movies.service.controller.ClientController.deleteClient(java.lang.String) throws com.example.movies.domain.exception.ValidationException 
2015-05-12 15:06:31.782 INFO 7728 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/health-check],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<com.example.movies.service.model.HealthCheck> com.example.movies.service.controller.MainController.doHealthCheck() 
2015-05-12 15:06:31.782 INFO 7728 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/version],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<java.lang.String> com.example.movies.service.controller.MainController.getVersion() 
2015-05-12 15:06:31.785 INFO 7728 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[text/html],custom=[]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest) 
2015-05-12 15:06:31.786 INFO 7728 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 
2015-05-12 15:06:31.816 DEBUG 7728 --- [   main] o.s.w.s.h.BeanNameUrlHandlerMapping  : Looking for URL mappings in application context: org.springframework.boot[email protected]55782201: startup date [Tue May 12 15:06:24 ART 2015]; root of context hierarchy 
2015-05-12 15:06:31.816 DEBUG 7728 --- [   main] o.s.w.s.h.BeanNameUrlHandlerMapping  : Rejected bean name 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor': no URL paths identified 
2015-05-12 15:06:31.816 DEBUG 7728 --- [   main] o.s.w.s.h.BeanNameUrlHandlerMapping  : Rejected bean name 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor': no URL paths identified 
2015-05-12 15:06:31.816 DEBUG 7728 --- [   main] o.s.w.s.h.BeanNameUrlHandlerMapping  : Rejected bean name 'org.springframework.context.annotation.internalRequiredAnnotationProcessor': no URL paths identified 
.... 

Ho cercato molto ma non ho trovato nulla. Hai qualche idea? Grazie in anticipo!

risposta

16

supponendo che si sta eseguendo l'avvio dell'applicazione da example-backend-development-service, vorrei suggerire di fare il seguente

Rinominare application.properties in example-backend-development-domain a `domainapplication.properties. Durante l'avvio dell'applicazione, sostituire la configurazione delle proprietà come mostrato di seguito. Ho provato questo e funziona per me.

/** 
    * Hello world! 
    * 
    */ 
    @SpringBootApplication 
    @PropertySource(value = { "application.properties","domainapplication.properties" }) 
    public class App 
    { 
     @Autowired 
     private ModuleService moduleService; 
     public static void main(String[] args) throws Exception { 
      ApplicationContext applicationContext= SpringApplication.run(App.class, args); 
      ModuleService moduleService = (ModuleService) applicationContext.getBean(ModuleService.class); 
      System.out.println(moduleService.getProp()); 
      String[] beanNames = applicationContext.getBeanDefinitionNames(); 
      Arrays.sort(beanNames); 
      for (String beanName : beanNames) { 
       System.out.println(beanName); 
      } 
     } 
    } 

EDIT: -

Se si avvia dal dominio anche semplicemente utilizzare il seguente nel reference qui

Se non ti piace application.properties come il nome del file di configurazione può passare a un altro specificando una proprietà di ambiente spring.config.name. È anche possibile fare riferimento a una posizione esplicita utilizzando la proprietà dell'ambiente spring.config.location (elenco separato da virgole di percorsi di directory o percorsi di file).

$ java -jar myproject.jar --spring.config.name=myproject 

o

$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties 
+0

Grazie per la risposta. Il problema è che ho bisogno che entrambi i nomi delle proprietà siano application.properties, perché come a modo tuo, quando eseguo l'avvio dal mio dominio, cercherà l'application.properties ma non è il suo nome – jscherman

+1

Ho modificato la mia risposta in modo che puoi anche fare il boot dal dominio .. – ArunM

+0

Grazie! Bella risposta – jscherman

Problemi correlati