在spring boot中加载子模块上下文

时间:2016-04-13 17:45:09

标签: java spring-boot

我在访问spring boot服务时遇到了一些问题。我有两个项目叫做“父项目”,第二项是儿童项目。子项目在Parent Project中添加为模块项目。所以问题是当我尝试访问父项目时它工作正常但是当我尝试访问子项目服务时它给我错误

Whitelabel错误页面 此应用程序没有/ error的显式映射,因此您将此视为回退.Wed Apr 13 22:29:30 PKT 2016 出现意外错误(type = Not Found,status = 404)。 没有可用消息

这是两个项目的代码 父项目

Example.java

package com.pos.dashboard.backend;
@RequestMapping("/test/**")
@RestController
public class Example {

    @RequestMapping(method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE})
    public String index() {
        return "Hello World";
    }

HelloWorldApplication.java

    package com.pos.dashboard.backend;
    @Configuration
    @ComponentScan
    @EnableAutoConfiguration
    public class HelloWorldApplication {

        public static void main(String[] args) {
            SpringApplication.run(HelloWorldApplication.class, args);
        }

Pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>dashboard</groupId>
    <artifactId>com.pos.interfaces</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
        <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.1.RELEASE</version>
    </parent>

<properties>
    <!-- The main class to start by executing java -jar -->
    <start-class>com.pos.dashboard.backend.HelloWorldApplication</start-class>
    </properties>

<dependencies>
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>


</dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin> 
    </plugins>
    </build>
    <modules>
        <module>jira-widget-app</module>
    </modules>
</project>

儿童项目

Example.java

package com.jira.pos.widget;
@RequestMapping("/tester/**")
@RestController
public class Example {

    @RequestMapping(method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE})
    public String index() {
        return "Hello World";
    }

HelloWorldApplication1.java

  package com.jira.pos.widget;
    @Configuration
    @ComponentScan
    @EnableAutoConfiguration
    public class HelloWorldApplication1 {

        public static void main(String[] args) {
            SpringApplication.run(HelloWorldApplication1.class, args);
        }   

的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>dashboard</groupId>
    <artifactId>com.pos.interfaces</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>jira-widget-app</artifactId>
  <packaging>jar</packaging>

  <properties>
    <!-- The main class to start by executing java -jar -->
    <start-class>com.jira.pos.widget.HelloWorldApplication1</start-class>
    </properties>
</project>

当我尝试访问http://localhost:8080/test时 它在浏览器上返回Hello World

然而,当我尝试访问http://localhost:8080/tester时 它Whitelabel错误页面 此应用程序没有/ error的显式映射,因此您将此视为回退。 4月13日星期三22:37:17 PKT 2016 出现意外错误(type = Not Found,status = 404)。 没有可用的消息

1 个答案:

答案 0 :(得分:-1)

父项目扫描当前包及其子包中的Spring bean。这是你的com.pos.dashboard.backend

您有两种选择(只需要其中一种):

  1. 将子项目的根包更改为类似com.pos.dashboard.backend.child的内容,以便它将由父JAR模块扫描
  2. 将子模块中的包包含在父组件扫描中:

    package com.pos.dashboard.backend;
    @Configuration
    @ComponentScan({"com.pos.dashboard.backend", "com.jira.pos.widget"})
    @EnableAutoConfiguration
    public class HelloWorldApplication {
    
  3. BTW,如果未将@EnableAutoConfiguration用作独立的Spring Boot应用程序,则子map[string]int是多余的。

    评论反应:

    哦,我也错过了你没有孩子项目作为Maven对父母的依赖。 Maven多模块项目为每个模块创建JAR。在您的情况下,您有父模块(同时也是多模块Maven父)和子模块。

    我建议创建第三个Maven pom,纯粹用于多模块设置,并有两个模块(您的父项目和子项目)。当然,您需要将子项目和maven依赖项包含在父项目中。

    This is very good tutorial for creating multi module projects.