fusionner de nombreux fichiers application.properties au lieu de remplacer lors de Spring Boot?

J’utilise Spring Booot MVC 1.2.2.RELEASE. J’ai mon projet multi-module qui est structuré comme ceci:

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

Je veux rendre les deux modules indépendants, ou au moins domaine de service, car service a un module de domaine dans son classpath. Les deux modules ont donc leur fichier application.properties dans leur dossier de ressources respectif. Je veux le faire comme ceci parce que je ne veux pas gérer toutes les propriétés du module de service (par exemple, les propriétés Jpa, qui appartiennent au module de domaine).

Donc, par exemple, j’ai cette application.properties dans le module de service

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

Et celui-ci dans le module de domaine

 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 

Le problème est que lorsque je démarre mon service, comme ils sont tous deux application.properties dans le classpath du service, ils remplacent alors application.properties du service par l’autre du domaine. Et je veux les fusionner s’ils portent le même nom, comme dans ce cas. Ici les grumes de spring (DEBUG + INFO)

  :: Spring Boot :: (v1.2.2.RELEASE) 2015-05-12 15:06:24.794 DEBUG 7728 --- [ main] oswcsStandardServletEnvironment : Adding [servletConfigInitParams] PropertySource with lowest search precedence 2015-05-12 15:06:24.797 DEBUG 7728 --- [ main] oswcsStandardServletEnvironment : Adding [servletContextInitParams] PropertySource with lowest search precedence 2015-05-12 15:06:24.798 DEBUG 7728 --- [ main] oswcsStandardServletEnvironment : Adding [systemProperties] PropertySource with lowest search precedence 2015-05-12 15:06:24.798 DEBUG 7728 --- [ main] oswcsStandardServletEnvironment : Adding [systemEnvironment] PropertySource with lowest search precedence 2015-05-12 15:06:24.798 DEBUG 7728 --- [ main] oswcsStandardServletEnvironment : Initialized StandardServletEnvironment with PropertySources [servletConfigInitParams,servletContextInitParams,systemProperties,systemEnvironment] 2015-05-12 15:06:24.840 INFO 7728 --- [ main] cemovies.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] cemovies.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.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@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] oswcsStandardServletEnvironment : Adding [class path resource [application.properties]] PropertySource with lowest search precedence 2015-05-12 15:06:25.083 DEBUG 7728 --- [ main] oswcsStandardServletEnvironment : Replacing [class path resource [application.properties]] PropertySource with [class path resource [application.properties]] 2015-05-12 15:06:26.033 INFO 7728 --- [ main] osbfsDefaultListableBeanFactory : 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] oswcsStandardServletEnvironment : Adding [applicationConfig: [classpath:/application.properties]] PropertySource with search precedence immediately lower than [applicationConfigurationProperties] 2015-05-12 15:06:26.753 DEBUG 7728 --- [ main] oswcsStandardServletEnvironment : Removing [applicationConfigurationProperties] PropertySource 2015-05-12 15:06:26.753 DEBUG 7728 --- [ main] oswcsStandardServletEnvironment : 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 'transactionAtsortingbuteSource' of type [class org.springframework.transaction.annotation.AnnotationTransactionAtsortingbuteSource] 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.BeanFactoryTransactionAtsortingbuteSourceAdvisor] 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] sbcetTomcatEmbeddedServletContainer : 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] oaccC[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2015-05-12 15:06:28.873 DEBUG 7728 --- [ost-startStop-1] osweb.context.ContextLoader : Published root WebApplicationContext as ServletContext atsortingbute with name [org.springframework.web.context.WebApplicationContext.ROOT] 2015-05-12 15:06:28.873 INFO 7728 --- [ost-startStop-1] osweb.context.ContextLoader : Root WebApplicationContext: initialization completed in 3962 ms 2015-05-12 15:06:29.077 DEBUG 7728 --- [ost-startStop-1] oswcsStandardServletEnvironment : Adding [servletConfigInitParams] PropertySource with lowest search precedence 2015-05-12 15:06:29.077 DEBUG 7728 --- [ost-startStop-1] oswcsStandardServletEnvironment : Adding [servletContextInitParams] PropertySource with lowest search precedence 2015-05-12 15:06:29.078 DEBUG 7728 --- [ost-startStop-1] oswcsStandardServletEnvironment : Adding [systemProperties] PropertySource with lowest search precedence 2015-05-12 15:06:29.078 DEBUG 7728 --- [ost-startStop-1] oswcsStandardServletEnvironment : Adding [systemEnvironment] PropertySource with lowest search precedence 2015-05-12 15:06:29.079 DEBUG 7728 --- [ost-startStop-1] oswcsStandardServletEnvironment : Initialized StandardServletEnvironment with PropertySources [servletConfigInitParams,servletContextInitParams,systemProperties,systemEnvironment] 2015-05-12 15:06:29.132 DEBUG 7728 --- [ost-startStop-1] oswcsStandardServletEnvironment : Adding [servletConfigInitParams] PropertySource with lowest search precedence 2015-05-12 15:06:29.132 DEBUG 7728 --- [ost-startStop-1] oswcsStandardServletEnvironment : Adding [servletContextInitParams] PropertySource with lowest search precedence 2015-05-12 15:06:29.133 DEBUG 7728 --- [ost-startStop-1] oswcsStandardServletEnvironment : Adding [systemProperties] PropertySource with lowest search precedence 2015-05-12 15:06:29.133 DEBUG 7728 --- [ost-startStop-1] oswcsStandardServletEnvironment : Adding [systemEnvironment] PropertySource with lowest search precedence 2015-05-12 15:06:29.133 DEBUG 7728 --- [ost-startStop-1] oswcsStandardServletEnvironment : Initialized StandardServletEnvironment with PropertySources [servletConfigInitParams,servletContextInitParams,systemProperties,systemEnvironment] 2015-05-12 15:06:29.746 INFO 7728 --- [ost-startStop-1] osbceServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2015-05-12 15:06:29.751 INFO 7728 --- [ost-startStop-1] osbcembedded.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2015-05-12 15:06:29.751 INFO 7728 --- [ost-startStop-1] osbcembedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2015-05-12 15:06:29.781 DEBUG 7728 --- [ost-startStop-1] osweb.filter.HiddenHttpMethodFilter : Initializing filter 'hiddenHttpMethodFilter' 2015-05-12 15:06:29.781 DEBUG 7728 --- [ost-startStop-1] osweb.filter.HiddenHttpMethodFilter : Filter 'hiddenHttpMethodFilter' configured successfully 2015-05-12 15:06:29.787 DEBUG 7728 --- [ main] oswcsStandardServletEnvironment : 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] swsmmaRequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@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] swsmmaRequestMappingHandlerMapping : Looking for request mappings in application context: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@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] swsmmaRequestMappingHandlerMapping : Mapped "{[/v3/clients],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity 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] swsmmaRequestMappingHandlerMapping : Mapped "{[/v3/clients/{clientId}],methods=[PUT],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity com.example.movies.service.controller.ClientController.putClient(com.example.movies.api.models.request.ClientRequestDTO,java.lang.Ssortingng) throws com.example.movies.domain.exception.ValidationException 2015-05-12 15:06:31.780 INFO 7728 --- [ main] swsmmaRequestMappingHandlerMapping : 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.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] swsmmaRequestMappingHandlerMapping : Mapped "{[/v3/clients/{clientId}],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity com.example.movies.service.controller.ClientController.getClient(java.lang.Ssortingng) throws com.example.movies.domain.exception.ValidationException 2015-05-12 15:06:31.781 INFO 7728 --- [ main] swsmmaRequestMappingHandlerMapping : Mapped "{[/v3/clients/{clientId}],methods=[DELETE],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public void com.example.movies.service.controller.ClientController.deleteClient(java.lang.Ssortingng) throws com.example.movies.domain.exception.ValidationException 2015-05-12 15:06:31.782 INFO 7728 --- [ main] swsmmaRequestMappingHandlerMapping : Mapped "{[/health-check],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity com.example.movies.service.controller.MainController.doHealthCheck() 2015-05-12 15:06:31.782 INFO 7728 --- [ main] swsmmaRequestMappingHandlerMapping : Mapped "{[/version],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity com.example.movies.service.controller.MainController.getVersion() 2015-05-12 15:06:31.785 INFO 7728 --- [ main] swsmmaRequestMappingHandlerMapping : 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] swsmmaRequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<java.util.Map> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2015-05-12 15:06:31.816 DEBUG 7728 --- [ main] oswshBeanNameUrlHandlerMapping : Looking for URL mappings in application context: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@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] oswshBeanNameUrlHandlerMapping : Rejected bean name 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor': no URL paths identified 2015-05-12 15:06:31.816 DEBUG 7728 --- [ main] oswshBeanNameUrlHandlerMapping : Rejected bean name 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor': no URL paths identified 2015-05-12 15:06:31.816 DEBUG 7728 --- [ main] oswshBeanNameUrlHandlerMapping : Rejected bean name 'org.springframework.context.annotation.internalRequiredAnnotationProcessor': no URL paths identified .... 

J’ai beaucoup cherché mais je n’ai rien trouvé. Avez-vous une idée? Merci d’avance!

En supposant que vous démarrez votre application à partir de example-backend-development-service , je vous suggère de procéder comme suit

Renommez application.properties dans example-backend-development-domain en `domainapplication.properties. Lors du démarrage de votre application, remplacez la configuration de la propriété, comme indiqué ci-dessous. J’ai testé cela et cela fonctionne pour moi.

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

MODIFIER:-

Si vous démarrez à partir de domaine également, utilisez les éléments suivants dans la référence ici

Si vous n’aimez pas application.properties comme nom de fichier de configuration, vous pouvez en changer en spécifiant une propriété d’environnement spring.config.name. Vous pouvez également faire référence à un emplacement explicite à l’aide de la propriété d’environnement spring.config.location (liste d’emplacement de répertoires ou de chemins de fichiers séparés par des virgules).

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

ou

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