一直用SpringMVC+Spring开发,虽然用了这么久,但对里面繁琐的配置还是很头疼,这种情况改用Springboot,无疑是个很好的选择。废话不多说,直接介绍自己如何使用的,在这之前还是有必要介绍下接下来的这个案例,这是一个入门级的Springboot应用案例,实现访问一个测试接口,获取到数据库中数据。
第一步:首先创建一个简单的MAVEN工程,这里也可以用IDEA上的MAVEN模版(maven-archetype-webapp)。然后就是在pom.xml中引入Springboot相关的依赖,这里先默认继承spring-boot-starter-parent(实际项目往往需要定义自己的)。
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zyk</groupId>
<artifactId>testSpringboot</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>testSpringboot Maven Webapp</name>
<url>http://maven.apache.org</url>
<!--继承默认的spring boot-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</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.7</java.version>
<maven.build.timestamp.format>yyyyMMdd</maven.build.timestamp.format>
</properties>
<dependencies>
<!-- Spring Boot JPA 连接数据库-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--Spring Boot的核心启动器,包含了自动配置、日志和YAML-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--支持全栈式Web开发,包括Tomcat和spring-webmvc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--使用log4j来进行日志记录-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
<!--json相关-->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<!--springboot项目测试相关-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!--打包成一个可以直接运行的 JAR 文件-->
<build>
<finalName>testSpringboot</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
这里使用的是JPA连接数据库,数据库是mySql,数据库配置在application.properties中
#数据库配置
spring.datasource.url=jdbc:mysql://192.168.8.189:3306/test
spring.datasource.username=root
spring.datasource.password=root
server.port=8080
#项目访问路径
server.context-path=/testSpringboot
使用的log4j来记录日志,配置文件为log4j.properties
#-------------------------------------------------------------------
log4j.rootCategory=INFO, A1, Daily
#log4j.logger.com.dayangit=DEBUG
log4j.logger.org.hibernate.hql.internal.ast.HqlSqlWalker=ERROR
#-------------------------------------------------------------------
#A1 system output
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%d{HH:mm:ss.SSS}] [%t] %m%n
#-------------------------------------------------------------------
# Daily
log4j.appender.Daily.encoding=GBK
log4j.appender.Daily=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Daily.File=/testSpringboot/testSpringboot.log
log4j.appender.Daily.DatePattern='.'yyyy-MM-dd
log4j.appender.Daily.layout=org.apache.log4j.PatternLayout
log4j.appender.Daily.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss.SSS}][%t]%m%n
这里还要说一下spring-boot-maven-plugin,这是为了将整个项目打包成可以直接运行的jar包,既然可以直接运行提供接口,也说明了springboot的另一个特性,内部自带tomcat。
pom.xml完成后,重新加载后就可以了。
第二步:建立需要用到的数据库表,及数据。上面application.properties中已经规定了数据库名,在此基础上新建自己要用到的表及数据。我这里的建表语句是
CREATE TABLE `testspringboot` (
`id` VARCHAR(36) NOT NULL,
`name` VARCHAR(50) DEFAULT NULL,
`text` VARCHAR(2000) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
插入数据
insert into `testspringboot` (`id`, `name`, `text`) values('id1','zyk','哈哈哈哈哈哈哈哈哈哈');
insert into `testspringboot` (`id`, `name`, `text`) values('id2','yjh','呵呵呵呵呵呵呵呵呵呵呵呵');
到此数据库部分完成。
第三步:建立项目的各个模块,实现相应的逻辑。我这里就用了四个模块:bean,controller,service,dao,还有一个特殊的类SpringBootSampleApplication(名字不固定,但是要包含特定的main方法),
package com.zyk.testSpringboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Created by Administrator on 2017\10\19 0019.
*/
@SpringBootApplication
public class SpringBootSampleApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootSampleApplication.class, args);
}
}
我的理解这个类就是springboot的入口,程序的各个模块需要在这个类的目录结构的下一级,我的目录结构如图:
这里我只创建了一个实体类,对应数据库中的testspringboot表
package com.zyk.testSpringboot.bean;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* Created by Administrator on 2017\10\19 0019.
*/
@Entity
@Table(name="testspringboot")
public class TestSpringboot {
@Id
private String id;
private String name;
private String text;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
需要提一下的这里的注解,@Entity说明这个class是实体类,并且使用默认的orm规则,如果想改变这种默认的orm规则,就要使用@Table来改变class名与数据库中表名的映射规则,@Id 注解可将实体Bean中某个属性定义为主键 ,@Table注解后,想要添加表中不存在字段,就要使用@Transient这个注解。
dao模块我只创建了一个接口:
package com.zyk.testSpringboot.dao;
import com.zyk.testSpringboot.bean.TestSpringboot;
import org.springframework.data.repository.CrudRepository;
/**
* Created by Administrator on 2017\10\19 0019.
*/
public interface ShowDaoInterface extends CrudRepository<TestSpringboot,String>{
}
这里需要说明的是,通过继承CrudRepository接口后,我们能够直接用springboot已经定义好的一些简单的增删改查方法。
service模块就是一个简单的调用方法,代码如下:
package com.zyk.testSpringboot.service;
import com.zyk.testSpringboot.bean.TestSpringboot;
import com.zyk.testSpringboot.dao.ShowDaoInterface;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* Created by Administrator on 2017\10\19 0019.
*/
@Service
public class ShowService {
@Resource
private ShowDaoInterface showDaoInterface;
public String getDataById(String id) {
TestSpringboot testSpringboot=showDaoInterface.findOne(id);
return testSpringboot.getText();
}
}
controller模块代码如下:
package com.zyk.testSpringboot.controller;
import com.zyk.testSpringboot.service.ShowService;
import net.sf.json.JSONObject;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.HashMap;
/**
* Created by Administrator on 2017\10\19 0019.
*/
@RestController
public class ShowController {
@Resource
private ShowService showService;
@GetMapping("/getTextById")
public ResponseEntity getText(@RequestParam String id) {
if(id!=null) {
String text=showService.getDataById(id);
JSONObject jsonObject=new JSONObject();
jsonObject.put("text",text);
return ResponseEntity.ok().body(jsonObject);
}else {
return ResponseEntity.badRequest().body(Collections.singletonMap("info","参数id为必填项"));
}
}
}
至此,整个项目创建完成,然后就是启动测试了。
我是用的IDEA,启动命令 spring-boot:run,在IDEA上配置如图:
然后直接点击运行就可以了,记得访问接口时加上/testSpringboot。