spring boot简单入门

spring boot的初期目标是:

  • 提供一个从根本上快速简洁的Spring开发体验
  • 提供诸多非必须的但是在大型的项目中很常见的功能(比如:整合的服务器,安全等)
  • 无须生成代码和xml配置

基于此,spring boot在项目中使用的优点显而易见:没有各种烦人的xml配置。 spring boot能让你更专注业务代码。

项目地址:https://github.com/yhan219/spring-boot-demo

新建spring boot项目

spring boot项目新建非常简单,可以到官网上新建后下载。如果你使用idea,new->project->Spring Initializr。如果你使用eclipse,可安装spring插件后新建。 如果你只有maven,不想安装插件,不想下载idea,那也很简单。新建一个maven项目。pom示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<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>com.yhan</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.BUILD-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

非常推荐使用gradle管理和构建项目。不过这里使用大家熟悉的maven。推荐打成jar包,而不是war。

spring boot无需特定的代码结构。但是推荐项目目录结构如下:

│  .gitignore
│  pom.xml
│  README.md
├─src
│  ├─main
│  │  ├─java
│  │  │  └─com
│  │  │     
│  │  └─resources
│  │      │  application.yml
│  │      │
│  │      ├─static
│  │      └─templates
│  └─test
│      └─java
│          └─com
└─target

spring mvc

spring boot提供了很简单的整合spring mvc的方法,你仅仅只需要添加如下依赖:

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
 </dependency>

添加好依赖后,spring boot已经为你配置好了常用的配置,比如tomcat。

编码

编码过程很简单,新建入口类:

@SpringBootApplication
public class DemoApplication {

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

不用感到奇怪,spring boot就是这样,直接运行main方法就能启动应用,无需配置tomcat(因为tomcat已经内置了)。

解释一下@SpringBootApplication注解,这个注解告诉spring boot怎么猜测你想如何配置spring,主要根据你添加的jar包。 因为 spring-boot-starter-web添加有tomcat和SpringMVC,所以SpringBoot会认为你在开发一个web项目,并以此进行配置。

最后的部分是应用的main方法。这是标准的java程序入口方法。我们的主方法委托给SpringBoot的SpringApplication类的run方法。 SpringApplication会启动我们的程序,启动自动配置的tomcat。我们需要把DemoApplication.class作为参数传递给SpringApplication。

写一个简单的Controller。如下:

@RestController
public class UserController {
    @GetMapping("/user/{name}")
    public String getUsername(@PathVariable String name) {
         return name;
    }
}

运行main方法,在浏览器上输入 localhost:8080/user/张三 即可看到相关输出。

spring boot devtools

顾名思义,这个包是用来为开发者服务的一个模块。其重要的功能就是热部署,类似jrebel插件。依赖如下:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>

常用的配置:

一些特定的资源改变无需触发重启,比如js,此时只需配置spring.devtools.restart.exclude属性。 比如你想排除/static和/public(spring boot已经默认排除了这两个目录,这里只是示例)下的资源,设置如下: application.properties:

spring.devtools.restart.exclude=static/**,public/**

或者使用yml配置:

spring:
  devtools:
    restart:
      exclude: static/**,public/**

由于yml更简洁,推荐使用yml配置方式。

你可能需要SpringBoot在你修改非classpath路径下的文件时也触发重启。这时你需要修改spring.devtools.restart.additional-paths来添加额外的路径进行监测。 另外还有运行远程程序及远程更新、远程调试等。

actuator

actuator是spring boot四大神器(auto-configuration、starters、cli、actuator)之一。 actuator是spring boot提供的对应用系统的自省和监控的集成功能,可以对应用系统进行配置查看、相关功能统计等。 简单说就是应用健康监控。 添加依赖:

     <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-actuator</artifactId>
     </dependency>

主要暴露的功能:

HTTP方法 路径 描述 鉴权
GET /autoconfig 查看自动配置的使用情况 true
GET /configprops 查看配置属性,包括默认配置 true
GET /beans 查看bean及其关系列表 true
GET /dump 打印线程栈 true
GET /env 查看所有环境变量 true
GET /env/{name} 查看具体变量值 true
GET /health 查看应用健康指标 false
GET /info 查看应用信息 false
GET /mappings 查看所有url映射 true
GET /metrics 查看应用基本指标 true
GET /metrics/{name} 查看具体指标 true
POST /shutdown 关闭应用 true
GET /trace 查看基本追踪信息  

例如,访问 http://localhost:8080/health 返回:

{
  "status": "UP"
}

ps:等添加了数据源后再回来试试这些命令。

mybatis

配置

spring boot整合mybatis非常简单。同样的,只要添加如下依赖:

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.2.0</version>
        </dependency>

在这之前,你需要添加数据库驱动和连接池。依赖如下:

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.28</version>
        </dependency>

数据源配置如下:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    username: root
    password: 6789@jkl

好了,配置好了,如果你不会mybatis,请按ctrl+w。

编码

@Mapper
public interface StudentRepository {

    @Insert("insert into student(id,name,sex) values(#{id},#{name},#{sex})")
    int insertStudent(Student student);

    @Select("select id,name from student where id=#{id}")
    Student selectStudent(@Param("id") String id);

}

如果你想使用mybatis官方推荐的xml,这里也很简单。

application.yml中添加:

mybatis:
  typeAliasesPackage: com.yhan.demo.domain
  mapper-locations: classpath:mapper/*.xml

把你的xml写到resource/mapper目录下试试看吧。

启动事物

仅仅只需要在入口类(DemoApplication.java)添加注解: @EnableTransactionManagement

猜你喜欢

转载自yhan219.iteye.com/blog/2368614