第一个springboot应用

来源:互联网 发布:2017广州qt场及js汇总 编辑:程序博客网 时间:2024/06/06 13:10

Servlet、Java版本对应

Spring Boot支持的java最低版本为Java SDK v1.6,推荐使用java最新版。默认情况下,Spring Boot 1.5.8.RELEASE需要Java 7和Spring Framework 4.3.12.RELEASE或更高版本。



开始之前,先要检查java版本在1.7(包含)以上与maven版本在3.2(包含)以上。

[plain] view plain copy
  1. $ java -version  
  2. java version "1.7.0_51"  
  3. Java(TM) SE Runtime Environment (build 1.7.0_51-b13)  
  4. Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)  
  5.    
  6. $ mvn -v  
  7. Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T13:58:10-07:00)  
  8. Maven home: /Users/user/tools/apache-maven-3.1.1  
  9. Java version: 1.7.0_51, vendor: Oracle Corporation  

Maven依赖

Spring Boot不需要与任何特殊工具集成,只需要在类路径下放入springboot依赖jar就可以直接像运行普通java程序一样运行。但是这种方式并不利于管理,所以官方推荐使用Maven或Gradle进行依赖管理。SpringBoot也支持与Ant进行集成,但是支持可能没那么好。本文只讲解Maven。

Spring Boot兼容Maven3.2或者更高版本。Spring Boot依赖的groupId为org.springframework.boot。pom.xml文件通常从spring-boot-starter-parent项目中继承,并将依赖项声明为一个或多个“Starter”。Spring Boot还提供了一个可选的 Maven插件来创建可执行的jar文件。

经典pom.xml

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  4.     <modelVersion>4.0.0</modelVersion>  
  5.     <groupId>com.example</groupId>  
  6.     <artifactId>myproject</artifactId>  
  7.     <version>0.0.1-SNAPSHOT</version>  
  8.     <!-- 从spring-boot-starter-parent中继承 -->  
  9.     <parent>  
  10.         <groupId>org.springframework.boot</groupId>  
  11.         <artifactId>spring-boot-starter-parent</artifactId>  
  12.         <version>1.5.8.RELEASE</version>  
  13.     </parent>  
  14.     <!-- 依赖一个web“starter” -->  
  15.     <dependencies>  
  16.         <dependency>  
  17.             <groupId>org.springframework.boot</groupId>  
  18.             <artifactId>spring-boot-starter-web</artifactId>  
  19.         </dependency>  
  20.     </dependencies>  
  21.     <!-- 可执行jar打包插件-->  
  22.     <build>  
  23.         <plugins>  
  24.             <plugin>  
  25.                 <groupId>org.springframework.boot</groupId>  
  26.                 <artifactId>spring-boot-maven-plugin</artifactId>  
  27.             </plugin>  
  28.         </plugins>  
  29.     </build>  
  30. </project>  

继承spring-boot-starter-parent

从spring-boot-starter-parent项目中继承以获得合理的默认值。父项目提供以下功能:

l   默认编译器为Java 1.6

l   默认字符集编码为UTF-8

l   版本号也从spring-boot-starter-parent中继承,省略了<version>公共依赖标签

l   默认的资源过滤规则

l   默认的插件配置

l   支持从特定配置文件中获取资源过滤规则

 

由于Spring配置文件支持${…​}占位符,为了避免冲突Maven过滤采用@..@占位符。

[html] view plain copy
  1. <parent>  
  2.     <groupId>org.springframework.boot</groupId>  
  3.     <artifactId>spring-boot-starter-parent</artifactId>  
  4.     <version>1.5.8.RELEASE</version>  
  5. </parent>  
从spring-boot-starter-parent继承的pom.xml覆盖升级单个依赖项非常简单,可以直接定义属性即可
[html] view plain copy
  1. <properties>   
  2.     <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>   
  3. </properties>  

非继承springboot依赖

实际项目中可能已经存在一个父级项目,这时候就不能从spring-boot-starter-parent项目中继承,要一个scope=import的依赖项。

[html] view plain copy
  1. <dependencyManagement>  
  2.      <dependencies>  
  3.         <dependency>  
  4.             <!-- Import dependency management from Spring Boot -->  
  5.             <groupId>org.springframework.boot</groupId>  
  6.             <artifactId>spring-boot-dependencies</artifactId>  
  7.             <version>1.5.8.RELEASE</version>  
  8.             <type>pom</type>  
  9.             <scope>import</scope>  
  10.         </dependency>  
  11.     </dependencies>  
  12. </dependencyManagement>  

这种方式不允许直接覆盖升级单个依赖项。要想覆盖升级,必须在spring-boot-dependencies依赖项前面添加。

[html] view plain copy
  1. <dependencyManagement>  
  2.     <dependencies>  
  3.         <!-- 覆盖升级 -->  
  4.         <dependency>  
  5.             <groupId>org.springframework.data</groupId>  
  6.             <artifactId>spring-data-releasetrain</artifactId>  
  7.             <version>Fowler-SR2</version>  
  8.             <scope>import</scope>  
  9.             <type>pom</type>  
  10.         </dependency>  
  11.         <dependency>  
  12.             <groupId>org.springframework.boot</groupId>  
  13.             <artifactId>spring-boot-dependencies</artifactId>  
  14.             <version>1.5.8.RELEASE</version>  
  15.             <type>pom</type>  
  16.             <scope>import</scope>  
  17.         </dependency>  
  18.     </dependencies>  
  19. </dependencyManagement>  

更改Java版本

[html] view plain copy
  1. <properties>   
  2.     <java.version> 1.8 </java.version>   
  3. </ properties>  

Spring Boot打包插件

[html] view plain copy
  1. <build>   
  2.     <plugins>   
  3.         <plugin>   
  4.             <groupId> org.springframework.boot </ groupId>   
  5.             <artifactId> spring-boot-maven-plugin </ artifactId>   
  6.         </ plugin>   
  7.     </ plugins>   
  8. </ build>  

构建代码

当一个类不包含package声明时,它被认为是在“默认包”中。通常不建议使用默认包,因为@ComponentScan@EntityScan或者@SpringBootApplication注解都只对注解所在包以及子包下的类起作用。

主应用程序类实现

SpringBoot包含一个带Main方法的类,叫做主应用程序类,这个类放在其他类所在包的根包下。@EnableAutoConfiguration@ComponentScan配合使用,添加在主应用程序类上,会自动扫描实例化其他包下面带特定注解的类。这样配置@ComponentScan可以不指定basePackage属性。


另外@SpringBootApplication注解可以替代@EnableAutoConfiguration@ComponentScan注解,因为@SpringBootApplication注解包含了@EnableAutoConfiguration@ComponentScan@Configuration注解。


@EnableAutoConfiguration@SpringBootApplication注解只能配置一个。

[java] view plain copy
  1. package com.example.myproject;  
  2. import org.springframework.boot.SpringApplication;  
  3. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;  
  4. import org.springframework.context.annotation.ComponentScan;  
  5. import org.springframework.context.annotation.Configuration;  
  6. @Configuration  
  7. @EnableAutoConfiguration  
  8. @ComponentScan  
  9. public class Application {  
  10.     public static void main(String[] args) {  
  11.         SpringApplication.run(Application.class, args);  
  12.     }  
  13. }  

SpringApplication.run()的source参数可以是XML配置文件,也可以是带@Configuration注解的配置类。SpringBoot建议使用@Configuration注解配置类。

更换自动配置

更换自动配置前需要首先禁用原来的配置,再使用@Configuration注解自定义配置。

例子:禁用自动配置数据源数据源

[java] view plain copy
  1. import org.springframework.boot.autoconfigure。*;  
  2. import org.springframework.boot.autoconfigure.jdbc。*;  
  3. import org.springframework.context.annotation。*;  
  4. @Configuration   
  5. @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})  
  6.  public  class MyConfiguration {  
  7. }  

属性excludeName可以指定类全名

spring.autoconfigure.exclude属性控制自动配置类的列表

 

可以禁用的自动配置类,开启debug模式,运行应用程序,即可得到

[plain] view plain copy
  1. =========================  
  2. AUTO-CONFIGURATION REPORT  
  3. =========================  
  4. ...略...  

 依赖注入

[java] view plain copy
  1. @Service  
  2. public class DatabaseAccountService implements AccountService {  
  3.   
  4.     private final RiskAssessor riskAssessor;  
  5.   
  6.     public DatabaseAccountService(RiskAssessor riskAssessor) {  
  7.         this.riskAssessor = riskAssessor;  
  8.     }  
  9.     // ...  
  10. }  

如果一个类有一个构造函数,则可以省略@Autowired

导入带@Configuration注解配置

配置信息不一定非要放到一个带@Configuration注解的配置类中,可以有多个带@Configuration注解的配置类,多个配置类可以用@Import注解导入,也可以使用@ComponentScan注解自动扫描带@Configuration注解的类。

导入XML配置

如果你一定要使用XML配置,建议创建一个带@Configuration注解的类,其他XML配置用@ImportResource注解导入。

运行程序

运用Maven插件运行

mvn dependency:tree进入应用根目录运行,查看pom依赖树。

mvn package 或者 mvn install进入应用根目录运行,打包应用。

mvn spring-boot:run 进入应用根目录运行,ctrl-c退出,也可以直接打包,java -jar命令运行。


可执行Jar包运行

$ java -jar target/myproject-0.0.1-SNAPSHOT.jar

查看

$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar

直接IDE中运行

执行Main方法

运行内存调整

Maven

$ export MAVEN_OPTS = -Xmx1024m -XX:MaxPermSize = 128M

Java

$ export JAVA_OPTS = -Xmx1024m -XX:MaxPermSize = 128M

远程调试

运行的时候,启用调试

$ java -Xdebug -Xrunjdwp:server = y,transport = dt_socket,address = 8000,suspend = n -jar target/myproject-0.0.1-SNAPSHOT.jar

也可把远程调试相关参数直接设置到环境变量中去

JAVA_OPTS“-Xdebug -Xrunjdwpserver = ytransport = dt_socketsuspend = n”

Spring Boot第一个应用

确保已安装JAVA和Maven,然后创建一个maven项目

pom.xml取上面的“经典pom.xml”

Java代码如下,然后运行Main方法,即完成了helloword。

[java] view plain copy
  1. import org.springframework.boot.*;  
  2. import org.springframework.boot.autoconfigure.*;  
  3. import org.springframework.stereotype.*;  
  4. import org.springframework.web.bind.annotation.*;  
  5. @RestController  
  6. @EnableAutoConfiguration  
  7. public class Example {  
  8.     @RequestMapping("/")  
  9.     String home() {  
  10.         return "Hello World!";  
  11.     }  
  12.     public static void main(String[] args) throws Exception {  
  13.         SpringApplication.run(Example.class, args);  
  14.     }  
  15. }  
原创粉丝点击