Windows下IntelliJ IDEA快速搭建Spring Boot的简单项目——超详细图解

本文参考:http://www.cnblogs.com/weizaibug/p/6657077.html

                  https://segmentfault.com/a/1190000013016655

                  https://blog.csdn.net/forezp/article/details/70341651 

                  https://blog.csdn.net/q343509740/article/details/80821409

本文将创建一个简单的Spring Boot的Hello World项目,进行配图讲解,并处理了“运行springboot demo时,提示404”等在搭建项目的过程中出现的问题。

笔者纯java新手,所以过程会十分详细,希望有需要的人仅仅通过我这一篇博客就能够顺利的完成一个简单的Spring Boot的项目,尽量减少其他资料的查看,也会有点啰嗦。欢迎各位同学与我进行讨论、资料交流和意见提出。

一、工具

以下内容使用工具,如果没有安装,本文将列出一些安装的参考博客,最好按照次序进行安装。此处应注意jdk和Maven存在版本对应关系,在安装下载时应当注意选择:

1、jdk 8  

     安装(免费):https://blog.csdn.net/kangmiao89757/article/details/9993887

2、IntelliJ IDEA 2018.3.5

     安装:https://blog.csdn.net/qq_35246620/article/details/61200815

     注(激)册(活):https://blog.csdn.net/zhanggonglalala/article/details/88547992

3、Maven 3.6.0

     安装:http://wiki.jikexueyuan.com/project/maven/environment-setup.html

4、Tomcat 8.5.38,安装时,注意你的tomcat的安装路径,之后可能会用到。

     安装:https://blog.csdn.net/yangxingpa/article/details/58174598

二、项目创建过程

1、打开IntelliJ IDEA,打开方式:安装时在桌面上创建的快捷方式,或安装目录->bin下的idea.exe,如图。

2、新建项目File->New->Project,如下图所示进行点击,如果打开的界面与下图不同,请按照路径进行选择即可。

在第一个界面,如下图所示进行选择,Spring Initializer->Project SDK->Default。注意,你的SDK版本可能与图中不同,以自己所按版本为主。Service URL按照默认选项即可。在点击next之前,需要确认你是否已经联网(途中英文提示)。

在next之后的界面,你修改你的Artifact和Name(相当于项目名称),只需要修改Artifact,Name就会跟着改变,二者最好相同,下面解释一下这些参数的意义。其中,pom文件(pom.xml)为基本的依赖管理文件。

        Group:对应pom文件中的groupId,项目组织的唯一标识,类似网址倒写,对应Java包的结构

        Artifact:对应pom文件的artifactId,项目唯一标识,对应项目名称。

        Type:构建类型,我们是Maven构建的,这里选择第一个Maven Project(一般默认既是Maven Project)

        Language:开发语言,选择Java

        Packaging:项目打包类型,这里选择打包成Jar文件。Spring Boot项目可以通过jar包直接部署,项目建立后也可以通过修改pom文件重新选择打包的方式

        Java Version:jdk版本,选择1.8,这里与你所安装的jdk版本相同。

        Version:项目版本,对应pom文件的version,一般不需要修改。

        Name:项目名称,基本上与Artifact一致。

        Description:开发人员对项目描述,对应pom文件的description,对项目的构建不会产生太大影响,但会影响可读性。

        Package:包名,为组名+项目名称。

再next进行依赖包的选择,这里我们选择web,如下图所示。这个项目暂时不需要其他的依赖包,通常其他项目还需要调用SQL里的依赖,比如MySQL、Myatis。

继续next,在这里可以修改项目建立的位置,点击右边的三个点就可以,选择好位置之后Finish。

注意,如果你要修改自己的路径,在选择文件夹后应该加上“\项目名”。在重新选择文件夹后,如图(为了展示这个错误,我重新建立个demo_again的项目,大家不要自己动手尝试,看看领会意思就可以)。

此时,如果直接next,也不会报错,但是将这个目录当作你的主目录,在其下建立所有的相关文件。加上“\demo_again”后会出现提示,“directory does not exist, It will be created by IntelliJ IDEA”,点击OK,这时IDEA会为你创建目录,在这个目录下建立所需要的一些项目文件,方便后续管理。

3、删除不需要的文件。如图所示,在左侧的项目结构中选择以“Project”的形式进行项目结构展示,删除code下的.mvn文件、src下的mvnw和mvnw.cmd文件,删除后如下图所示。

通过Spring Boot的自动构建,可以为我们构建一个主配置类,并包含其main方法。内容如下,@SpringBootApplication 可以设置从指定的路径中扫描包,纳入 Spring 容器,也可以设置从 Spring 容器中排除某些类。

package com.example.demo;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

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

}

有些博客建议将src->main->java->com.example.demo下的application.properties文件该成appliction.yml文件。只需要使用IDEA的Rename就可以了,位置在如图所示右键->Refactor->Rename。原因是properties类型的配置文件,在编码过程中重复单词太多, 并称中文注释的编码在转换过程中经常会变乱码, spring boot支持YAML格式的配置。

对于目录的一些解释:

  • pom文件为基本的依赖管理文件
  • src->main->java->resouces 资源文件
    • statics 用于保存静态资源,比如js、css、image
    • templates 模板资源,Spring Boot是通过内置Tomcat进行jarbao生成,默认不支持jsp页面。可以使用模板引擎来进行开发如(freemarker、thymeleaf)
    • application.properties或者application.yml 配置文件
  • src->main->java->com.example.demo->DemotApplication程序的入口。

4、Hello World两种方法

这一部分是如何Hello World项目的代码实现,针对java新手而言是详细教程,针对一些有Spring编程经验的人来讲可能有点过于啰嗦,所以大家根据自己的需要来看。

(1)方法1,直接打开项目自动生成的DemoApplication类,添加Controller。修改代码使其如下。"@"开头的内容为注解,输入部分内容,Idea会为你联想相关注解,通过键盘和鼠标选择你需要的,按回车,即可输入。这样不仅完成注解的输入,还能够自动引用相关包,避免手动输入的麻烦。比如需要输入“@SpringBootApplication”,只需输入“@SBA”即可。

@Controller
@SpringBootApplication
@Configuration
public class DemoApplication {

    @RequestMapping("/hello")
    @ResponseBody
    public String hello(){
        return "hello world!";
    }

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

(2)方法二:在项目中新建Controller。在com.example.demo处右键,new->Java Class新建Controller,并命名为HelloController,如下图,在HelloController中输入代码,使其内容如下。

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String say(){
        return "Hello java!";
    }
}

然后,在DemoApplication中输入“@SpringBootApplication”,正常情况下系统会自动生成,使其如下。

你也可以同时使用两种方法,但要注意,“@RequestMapping”后面跟的内容不一样,不能都是“/hello”或者“hello”,不然会造成域名冲突。

5、运行Hello World项目

(1)在DemoApplication.java文件中右键,选择run。或者直接在左侧菜单处找到DemoApplication.java文件中右键,选择run。

这时,IDEA下方会出现运行日志,大多数情况,只有冒号后面的内容是对我们真正有用的。最后一条表示项目成功启动,以及所需时间。倒数第二条(也许你并不是出现在这个位置),表示一会我们在浏览器中需要输入的端口号,这里我们的端口号是8081,正常默认是8080。端口号如何设置,我们之后会在问题处理中提到。

6、查看运行效果

打开浏览器,输入网址"http://localhost:端口号/子域名”,这里按照我们的配置是“http://localhost:8081/hello”,输入后效果如图。

三、问题处理

1、IDEA运行成功,日志报错“Failed to start component“,”The Tomcat connector configured to listen on port 8081 failed to start. The port may already be in use or the connector may be misconfigured.”、“The Tomcat connector configured to listen on port 8080 failed to start.”

效果就是你需要展示的页面内容无法出现。IDEA不会报错,但是在浏览器运行网站时,就会报错404 error page,如下,或者出现之前加载过的页面,。

完整日志如下:

2019-03-19 11:33:48.303  INFO 11808 --- [           main] c.e.demo_again.DemoAgainApplication      : Starting DemoAgainApplication on PC-20190311WVSW with PID 11808 (D:\code\demo_agian\target\classes started by zhanggong004 in D:\code\demo_agian)
2019-03-19 11:33:48.306  INFO 11808 --- [           main] c.e.demo_again.DemoAgainApplication      : No active profile set, falling back to default profiles: default
2019-03-19 11:33:49.542  INFO 11808 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8081 (http)
2019-03-19 11:33:49.561  INFO 11808 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-03-19 11:33:49.561  INFO 11808 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.16]
2019-03-19 11:33:49.567  INFO 11808 --- [           main] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jdk1.8.0_201\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Git\cmd;C:\Program Files\Java\jdk1.8.0_201\bin;C:\Program Files\Java\jdk1.8.0_201\jre;D:\appForWork\maven\apache-maven-3.6.0\bin;D:\appForWork\springBoot\spring-1.4.3.RELEASE\bin;%CATALINA_HOME%\bin;C:\Users\zhanggong004\AppData\Local\Microsoft\WindowsApps;;.]
2019-03-19 11:33:49.675  INFO 11808 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-03-19 11:33:49.675  INFO 11808 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1316 ms
2019-03-19 11:33:49.847  INFO 11808 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-03-19 11:33:49.992 ERROR 11808 --- [           main] org.apache.catalina.util.LifecycleBase   : Failed to start component [Connector[HTTP/1.1-8081]]

org.apache.catalina.LifecycleException: Protocol handler start failed
	at org.apache.catalina.connector.Connector.startInternal(Connector.java:1008) ~[tomcat-embed-core-9.0.16.jar:9.0.16]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.16.jar:9.0.16]
	at org.apache.catalina.core.StandardService.addConnector(StandardService.java:226) [tomcat-embed-core-9.0.16.jar:9.0.16]
	at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.addPreviouslyRemovedConnectors(TomcatWebServer.java:259) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
	at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:197) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.startWebServer(ServletWebServerApplicationContext.java:311) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:164) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:552) [spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
	at com.example.demo_again.DemoAgainApplication.main(DemoAgainApplication.java:10) [classes/:na]
Caused by: java.net.BindException: Address already in use: bind
	at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_201]
	at sun.nio.ch.Net.bind(Net.java:433) ~[na:1.8.0_201]
	at sun.nio.ch.Net.bind(Net.java:425) ~[na:1.8.0_201]
	at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) ~[na:1.8.0_201]
	at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) ~[na:1.8.0_201]
	at org.apache.tomcat.util.net.NioEndpoint.initServerSocket(NioEndpoint.java:236) ~[tomcat-embed-core-9.0.16.jar:9.0.16]
	at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:210) ~[tomcat-embed-core-9.0.16.jar:9.0.16]
	at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1085) ~[tomcat-embed-core-9.0.16.jar:9.0.16]
	at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1171) ~[tomcat-embed-core-9.0.16.jar:9.0.16]
	at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:568) ~[tomcat-embed-core-9.0.16.jar:9.0.16]
	at org.apache.catalina.connector.Connector.startInternal(Connector.java:1005) ~[tomcat-embed-core-9.0.16.jar:9.0.16]
	... 14 common frames omitted

2019-03-19 11:33:49.996  INFO 11808 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2019-03-19 11:33:50.004  INFO 11808 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-03-19 11:33:50.008 ERROR 11808 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

The Tomcat connector configured to listen on port 8081 failed to start. The port may already be in use or the connector may be misconfigured.

Action:

Verify the connector's configuration, identify and stop any process that's listening on port 8081, or configure this application to listen on another port.

2019-03-19 11:33:50.011  INFO 11808 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'

Process finished with exit code 1

很多新手和我一样,一看到日志就头痛,大量的英文感觉无从下手。其实在出现错误时,要注意“fail”、“caused by”等关键词就可以了,上述日志的意思是,端口8081被占用。

这是由什么造成的?可能出现的原因有许多种,这里我说一下我的原因。可能你之前做了一个项目使用了8081这个端口,现在这个项目再使用8081就会提示其已经被使用,很简单的理解是,不可能两个网站使用同一个域名,对不对。所以,我们只需要修改一下所做项目的域名即可。

解决方案:

打开application.properties文件或者是application.yml文件,位置如下图。

如果你之前没有动过这个文件,你的端口号应该是8080,现在可以在这个文件中重新设置,在其中输入下面代码,设置一个新的端口号。如下是application.properties的代码。

server.port=8081

如果你的文件是application.yml,修改端口号的代码如下,注意回车和空格:

server:
  port: 8081

注意,输入结束后,应该如图所示,如果你的字体颜色未变,可能是应为“8081”前没有添加空格所致。

2、数据库配置出现问题。报错信息“ 'url' attribute is not specified and no embedded datasource could be configured.具体的日志信息(错误部分)如下。

2019-03-19 15:28:37.279 ERROR 8276 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
	If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
	If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

如果你完全按照我的博客来,应该是不会出现这个问题的,因为本文没有数据库配置的任何相关操作。所以这里是为按照其他博客进行操作,并且遇到这个问题的人进行解答。

这个错误造成的原因:在建立项目的时候建立了MySQL数据库相关的依赖却没有在项目中进行数据库的相关配置。

解决方法,在项目中增加数据库配置。

首先你已经安装了MySQL和MyBatis,需要知道你的MySQL的用户名和密码,并且已经在MySQL建立了一个数据库(数据库中有没有表和数据没关系,能连上就可以)。如果你不太清楚,请查看我的博文。“在Windows操作系统下使用MySQL过程中出现的小问题及解决方法的汇总(不断更新)”。

然后在application.yml或者application.properties中添加代码。

如果你的文件是application.yml,输入代码

spring:
  datasource:
    url: jdbc:mysql://"你的地址"
    username: 登录身份
    password: 登录密码

比如:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/lite?user=root&password=123456
    username: root
    password: 123456

如果你的文件是application.properties,输入代码

spring.datasource.url=jdbc:mysql://你的地址
spring.datasource.username=登录身份
spring.datasource.password=登录密码

比如:

spring.datasource.url=jdbc:mysql://localhost:3306/lite?user=root&password=123456
spring.datasource.username=root
spring.datasource.password=123456

然后重新运行即可。

结语:

本人纯新手,这篇博客是在查看很多前辈的博客进行实践的基础上进行记录,所以会特别特别详细。我还是希望我的博客如果有可能,可以尽量给像我这样的菜鸟一些帮助。最后,感谢大家阅读。如果转载,请先点个赞,然后注明我的网址,码字不易,谢谢。

猜你喜欢

转载自blog.csdn.net/zhanggonglalala/article/details/88640605