合并许多application.properties文件而不是Spring Boot上的替换?

我正在使用Spring Booot MVC 1.2.2.RELEASE。 我有我的多模块项目,结构如下:

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

我想让两个模块独立,或者至少从服务域创建域,因为服务在其类路径中具有域模块。 因此,两个模块都将application.properties文件放在各自的资源文件夹中。 我想这样做,因为我不想处理来自服务模块的所有属性(例如,属于域模块的Jpa属性)。

例如,我在服务模块中有这个application.properties

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

而这一个在域模块中

 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 

问题是当我启动我的服务时,因为它们都是application.properties在服务类路径中,然后它将来自服务的application.properties替换为来自域的另一个。 如果它们具有相同的名称,我想合并它们,就像这种情况一样。 这里是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 '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] 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 attribute 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.String) 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.String) 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.String) 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 .... 

我搜索了很多,但我找不到任何东西。 你有什么主意吗? 提前致谢!

假设您正在从example-backend-development-service启动应用程序,我建议您执行以下操作

example-backend-development-domain application.properties重命名为`domainapplication.properties。 在引导您的应用程序时,覆盖属性配置,如下所示。 我测试了它,它确实对我有用。

  /** * 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); } } } 

编辑:-

如果您也从域启动,请在此处参考中使用以下内容

如果您不喜欢application.properties作为配置文件名,则可以通过指定spring.config.name环境属性来切换到另一个。 您还可以使用spring.config.location环境属性(以逗号分隔的目录位置列表或文件路径)来引用显式位置。

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

要么

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