2015-05-12 12 views
9

Używam Spring Booot MVC 1.2.2.RELEASE. Mam projektu multi-moduł, który jest zorganizowany tak:Scalanie wielu plików application.properties zamiast zamiany w Spring Boot?

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

Chcę, aby oba moduły niezależne, lub przynajmniej domeny z usługi, ponieważ usługa ma moduł domeny w swojej ścieżce klasy. Tak więc oba moduły mają swój plik application.properties w odpowiednim folderze zasobów. Chcę to zrobić w ten sposób, ponieważ nie chcę obsługiwać wszystkich właściwości z modułu usługi (np. Właściwości Jpa, które należą do modułu domeny).

Tak na przykład mam ten application.properties w module serwisowym

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

A ten moduł domeny

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 

Problem polega na tym, że kiedy uruchomić moją usługę, ponieważ zarówno aplikacji .properties znajdują się w ścieżce klasy usługi, a następnie zamieniają właściwość application.properties z usługi na inną z domeny. I chcę je scalić, jeśli mają takie samo imię i nazwisko, jak ta sprawa. Tutaj dzienniki sprężynowe (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 
.... 

Szukałem dużo, ale nie mogłem znaleźć niczego. Masz jakiś pomysł? Z góry dziękuję!

Odpowiedz

16

Zakładając, że uruchamianie aplikacji z example-backend-development-service, proponuję następujący sposób

Rename application.properties w example-backend-development-domain do `domainapplication.properties. Podczas uruchamiania aplikacji, należy zastąpić konfigurację właściwości, jak pokazano poniżej. Testowałem to i to działa dla mnie.

/** 
    * 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: -

Jeśli uruchamianie z dziedziny równie dobrze użyć następujących w reference tutaj

Jeśli nie podoba application.properties jak nazwa pliku konfiguracyjnego ty można przełączyć na inny, określając właściwość środowiska spring.config.name. Możesz także odwołać się do jawnej lokalizacji, korzystając z właściwości środowiska spring.config.location (lista adresów katalogów lub ścieżek plików oddzielonych przecinkami).

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

lub

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

Dzięki za odpowiedź. Problem polega na tym, że potrzebuję, aby obie nazwy właściwości były application.properties, ponieważ tak jak na swój sposób, kiedy uruchamiam się z mojej domeny, to wyszuka application.properties, ale to nie jest jego imię. – jscherman

+1

Edytowałem swoją odpowiedź, aby możesz także uruchomić z domeny. – ArunM

+0

Dzięki! Świetna odpowiedź – jscherman

Powiązane problemy