第一个springboot项目
1.图形化方式 ( http://start.spring.io/ )
不再阐述
2.命令行的方式 (Maven创建)
执行下面的命令:
mvn archetype:generate -DgroupId=com.gupao -DartifactId=first-spring-boot-app -Dversion=1.0.0
然后打开此生成的工程,在工程的 pom.xml文件当中添加下面的依赖
先在头部的创建一个 parent标签,写上下面的内容:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent>
然后再添加一个 maven的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
构建多模块的web应用
1.修改主工程类型 <packaging>jar</packaging> 替换成 <packaging>pom</packaging>
2.新建web工程,将遗留代码遗留到 web 的java目录下。
3.再从web工程独立出 model 工程
4.将web工程依赖 model 工程
5.重复步骤3,独立persistence
6.再从 persistence 中添加 model 的依赖
7.最终的依赖关系 web-->persistence-->model
互相依赖的 springboot maven 项目如下地址
https://github.com/q907364606/first-springboot-app
构建可执行的 jar 或者是 war
web-1.0.0-SNAPSHOT.jar 当中没有主清单属性?
需要一个springboot的插件
jar的规范里面,有一个 Manifest.MF 里面有一个 Main-class 的属性:
API : Mainfest#getAttribute
在编写的程序 web 模块下的 pom.xml文件中增加下面的依赖:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
使用下面的命令打包项目:
mvn -Dmaven.test.skip -U clean package
打包显示成功了一个 web-1.0.0-SNAPSHOT.jar 为名字的 jar 文件
然后执行
explorer .
除了通过jar或者 war启动的方式外,还有通过目录启动的方式
目录启动的方式可以帮助解决过期的 jar 不支持 SpringBoot的新方式,比如老版本的 mybatis
如果是jar包,启动的是 org.springframework.boot.loader.JarLauncher
如果是war包,启动的是 org.springframework.boot.loader.WarLauncher
注意事项
BOOT-INF 是 springBoot 1.4之后才开始有的
当使用插件或者依赖的时候,如果版本是 Milestone的时候,需要增加
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/snapshot</url>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<url>http://repo.spring.io/milestone</url>
</pluginRepository>
</pluginRepositories>
在META-INF/MANIFEST.MF 里面有指定两个属性
Main.class org.springframework.boot.loader.JarLauncher
Start.class com.gupao.App
在生成的 jar 包下运行以下java命令
jar -jar web-1.0.0-SNAPSHOT.jar
然后即可看到 成功运行 springboot的项目
注意除了 jar 或者 war 启动的方式,还有目录启动的方式
1.目录启动方式,可以帮助解决过期的 jar 包不支持 springboot的新方式
首先来到生成的jar包的解压目录(web-1.0.0-SNAPSHOT), 在这个目录下启动命令是:
java org.springframework.boot.loader.JarLauncher
执行之后同样可以看到 springboot的启动界面
如果是war 包,启动的是 org.springframwwork.boot.loader.WarLauncher
从jar包切换成 war 包的打包方式
1.修改 <packaging> 编程 war
2.创建 webapp/WEB-INF 目录,(相对于 src/main 这个目录),然后再这个目录中增加一个 web.xml 文件
注意步骤2 是为了绕过插件的限制。
还可以在要打包工程的 pom.xml文件当中的 plugins当中增加下面的依赖
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
使用 war 包启动的时候也是一样的方式 jar -jar web-1.0.0-SNAPSHOT.war
如果说想用 命令的方式启动多个项目,可以这样做,执行下面的命令。
java -jar web-1.0.0-SNAPSHOT.war --server.port=0 指定 --server.port 意思是让主机用随机的一个端口启动,避免默认8080 端口的冲突
除此之外,项目还可以使用 maven 的启动方式:
mvn -Dmaven.test.skip -U clean install 这句话是编译工程并且将项目打成 jar 包(编译的时候要在父工程所在的pom.xml文件夹下进行编译)
mvn spring-boot:run 运行的时候需要在 springApplication.run( args ); 这个方法所在的文件夹下运行方法,本案例中需要来到父工程目录下的web目录当中。
mvn spring-boot:run -Dserver.contextPath=/first-app
问答:
webFluxConfiguration 里面的映射路径和 Controller 中的路径有什么区别吗?
答:基本上没有区别的,注意不重复定义,或者 URL 语意有重复
问:
WebFlux 不是跟 mvc 不能一起吗,怎么一起启动了?
答:spring-boot-starter-webmvc 和 spring-boot-starter-webflux可以放在同一个应用,可以webflux不会工作,默认使用 webmvc,webflux不会被采用。 实际上 webflux是兼容Annotation驱动,比如 @RequestMapping
问: webflux 可以支持 restfull吗?
答:可以支持。
问: spring的老项目怎么迁移到 springboot当中呢?
答: 老的 xml方式采用 @ImportResource 导入。
问:Tomcat如何调优:
答:通过 application.properties 调整配置参数。
第二种通过接口回调。