2017-11-15 3 views
1

저는 스프링 부트 메니시 자바 다중 모듈 구조를 가지고 있습니다. 내 구조는 다음과 같습니다Maven Multi Module은 비즈니스 모듈에서 데이터 소스 application.properties를 복제하려고합니다.

product (parent pom module) 
..product-data (child pom module) 
..product-business (has dependency for product-data) 
..product-rest (has dependency for product-business) 
..product-entities (child pom module) 

제품 데이터 제품 휴식과 제품 나머지는 JSON 객체를 반환에 엔티티 객체를 반환합니다 제품 비즈니스 및 제품 비즈니스 엔티티 객체를 반환합니다.

제품 데이터가 정상적으로 실행됩니다. 그러나 제품 비즈니스를 실행하자마자 오류 "데이터베이스 유형 NONE에 대한 내장 데이터베이스 드라이버 클래스를 결정할 수 없습니다"이 발생합니다. Spring은 내 product-business/src/main/resources/application.properties 파일 아래에서 spring.datasource .... 속성을 찾는다. 여기에 모든 속성을 정의하면 오류가 사라지고 제품 데이터에서 데이터를 가져옵니다.

하지만 !! 제품 - 데이터/src/main/resources/application.properties 파일 아래에 속성을 이미 정의했습니다. 제품 비즈니스 모듈에서 동일한 속성을 복제해야하는 이유는 무엇입니까? 전체 목적은 레이어를 분리하는 것입니다. product-data는 데이터를 가져 오는 역할을 담당하며 자체 구조 아래에 spring.datasource ... 속성을 찾아야합니다. 왜 비즈니스 모듈에서도 속성을 복제해야합니까? 나는 뭔가를 놓치고 있다고 확신한다. 누군가가 어떤 단서를 가지고 있습니까?

나는 많은 비슷한 질문을했지만 그 중 대부분은 속성을 잃어 버려서 내 문제를 해결하지 못했습니다. 일단 제품 데이터에서 제품 비즈니스로 속성을 붙여 넣으면 오류가 사라지기 때문에 POM 파일이 용의자가 아닌 것으로 가정합니다. 그러나 넣다 당신은 여전히 ​​내 치어보고 싶다면 :

상위 제품 POM

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.owner</groupId> 
    <artifactId>product</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <properties> 
     <maven.compiler.source>1.8</maven.compiler.source> 
     <maven.compiler.target>1.8</maven.compiler.target> 
     <nopeasti.version>1.0.0-SNAPSHOT</nopeasti.version> 
    </properties> 

    <dependencies> 

    </dependencies> 

    <modules> 
     <module>product-data</module> 
     <module>product-business</module> 
     <module>product-rest</module> 
     <module>product-entities</module> 
    </modules> 
</project> 

제품 데이터 POM

<project> 
    <artifactId>product-data</artifactId> 
    <packaging>jar</packaging> 
    <parent> 
     <groupId>com.owner</groupId> 
     <artifactId>product</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
     <relativePath>../pom.xml</relativePath> 
    </parent> 
    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <!-- Import dependency management from Spring Boot --> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-dependencies</artifactId> 
       <version>1.5.8.RELEASE</version> 
       <type>pom</type> 
       <scope>import</scope> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.postgresql</groupId> 
      <artifactId>postgresql</artifactId> 
      <scope>runtime</scope> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
       <version>2.0.0.M6</version> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

제품 비즈니스 POM을

에 따르면 3,691,363,210
<project> 
    <artifactId>product-business</artifactId> 
    <packaging>jar</packaging> 
    <parent> 
     <groupId>com.owner</groupId> 
     <artifactId>product</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
     <relativePath>../pom.xml</relativePath> 
    </parent> 
    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <!-- Import dependency management from Spring Boot --> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-dependencies</artifactId> 
       <version>1.5.8.RELEASE</version> 
       <type>pom</type> 
       <scope>import</scope> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.owner</groupId> 
      <artifactId>product-data</artifactId> 
      <scope>compile</scope> 
      <version>1.0.0-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
       <version>2.0.0.M6</version> 
      </plugin> 
     </plugins> 
    </build> 
</project> 
+0

오류 : 데이터베이스 유형 NONE 행동 임베디드 데이터베이스 드라이버 클래스를 결정할 수 없습니다 : 당신이 포함 된 데이터베이스를 원하는 경우 지원되는 넣어주십시오 응용 프로그램이 설명을 시작하지 못했습니다 하나는 classpath에. 특정 프로파일에서로드 할 데이터베이스 설정이있는 경우 활성화해야 할 수도 있습니다 (프로파일이 현재 활성 상태가 아닙니다). –

+0

가져온 스프링 부트 종속성과 같은 버전의 spring-boot-maven-plugin을 사용해야합니다 ... 함께 맞지 않습니다 ... – khmarbaise

+0

product-data 및 product-business 모두 동일한 버전의 스프링 부트를 사용합니다 –

답변

0

,

그것 (하나의 application.properties를 사용하는 응용 프로그램에서 런타임에 충돌이있을 수 있기 때문에 도서관에서 application.properties을 넣어하지 않는 것이 좋습니다 지금까지

는이 문제를 해결하고 여전히 분리 할 구조를 유지하기 위해) 클래스 경로에서로드, 나는 다른 파일을 생성 data.properties 자원에서 s 폴더에 product-data 모듈이 있고 @PropertySource 주석이 구성 파일에 지정되어 있습니다. 다음은 제품 데이터 모듈의 구성 파일입니다. spring.datasource 속성은이 파일에 정의되어 있습니다. 그런 다음 다른 두 모듈에서 spring.datasource 속성이 필요하지 않습니다.

@ComponentScan 
@EnableAutoConfiguration 
@SpringBootConfiguration 
@PropertySource(value = "data.properties") 
public class NopeastiDataConfig { 
    // no main needed here as this is library consumed by business layer 
} 

또한 여기에 읽기 : 내가 얻을 Externalized Configuration

관련 문제