Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
Spring Boot让我们的Spring应用变的更轻量化。比如:你可以仅仅依靠一个Java类来运行一个Spring引用。你也可以打包你的应用为jar并通过使用java -jar来运行你的Spring Web应用。
Spring Boot的主要优点:
-
为所有Spring开发者更快的入门
-
开箱即用,提供各种默认配置来简化项目配置
-
内嵌式容器简化Web项目
-
没有冗余代码生成和XML配置的要求
在下面的代码中只要有一定基础会发现这写代码实例非常简单对于开发者来说几乎是“零配置”。
SpringBoot运行开发工具:jdk8,IDEA,STS,eclipse(需要安装STS插件)这些都支持快速启动SpringBoot工程。我这里就不快速启动了,使用maven工程。学习任何一项技术首先就要精通HelloWord,那我们来跑个初体验。
首先只用maven我们创建的maven工程直接以jar包的形式创建就行了,首先我们来引入SpringBoot的依赖
首先我们需要依赖SpringBoot父工程,这是每个项目中必须要有的。
<!--引入SpringBoot父依赖 欢迎关注公众号 Web项目聚集地--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> <relativePath/> </parent> <!--编码与JAVA版本--> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties>
我们启动WEB模块当然必须要引入WEB模块的依赖
<dependencies> <!--引入SpringBoot-WEB模块 欢迎关注公众号 Web项目聚集地--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
我们需要编写一个SpringBoot启动类,SpringbootFirstExperienceApplication.java
@SpringBootApplication public class SpringbootFirstExperienceApplication { public static void main(String[] args) { SpringApplication.run(SpringbootFirstExperienceApplication.class, args); } }
到了这里我们直接把他当成SpringMVC来使用就行了,不过这里默认是不支持JSP官方推荐使用模板引擎,后面会写到整合JSP。这里我就不写Controller了。
@SpringBootApplication:之前用户使用的是3个注解注解他们的main类。分别是@Configuration,@EnableAutoConfiguration,@ComponentScan。由于这些注解一般都是一起使用,spring boot提供了一个统一的注解@SpringBootApplication。
SpringBoot目录结构注意事项:我们使用这个注解在不指定扫描路径的情况下,SpringBoot只能扫描到和SpringbootFirstExperienceApplication同包或子包的Bean;
在src/main/resources中我们可以有几个文件夹:
-
templates:用来存储模板引擎的,Thymeleaf,FreeMarker,Velocity等都是不错的选择。
-
static:存储一些静态资源,css,js等
-
public:在默认SpringBoot工程中是不生成这个文件夹的,但是在自动配置中我们可以有这个文件夹用来存放公共的资源(html等)
-
application.properties:这个文件名字是固定的,SpringBoot启动会默认加载这些配置在这里面可以配置端口号,访问路径,数据库连接信息等等。这个文件非常重要,当然官方中推出了一个yml格式这是非常强大的数据格式。
引入依赖:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <dependencies> <!--引入WEB模块--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--引入JDBC模块--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--引入数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
配置application.properties,虽然说是“零配置”但是这些必要的肯定要指定,否则它怎么知道连那个数据库?
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver
使用方式:
@Service public class EmployeeService { @Autowired private JdbcTemplate jdbcTemplate; public boolean saveEmp(String name,String email,String gender){ String sql = "insert into tal_employee values(null,?,?,?)"; int result = jdbcTemplate.update(sql, name,email,gender); System.out.println("result : " + result); return result > 0 ? true:false; } }
@RestController public class EmployeeController { @Autowired private EmployeeService employeeService; @RequestMapping("/save") public String insert(String name,String email,String gender){ boolean result = employeeService.saveEmp(name, email, gender); if(result){ return "success"; } return "error"; } }
这里我们直接返回一个文本格式。
@RestController在上面的代码中我们使用到这个注解修改我们的Controller类而是不使用@Controller这个注解,其实中包含了@Controller,同时包含@ResponseBody既然修饰在类上面那么就是表示这个类中所有的方法都是@ResponseBody所以在这里我们返回字符串在前台我们会以文本格式展示,如果是对象那么它会自动转换成json格式返回。
整合JPA同样的整合JPA我们只需要启动我们SpringBoot已经集成好的模块即可。
添加依赖:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--启动JPA组件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies>
启动JPA组件后直接配置数据库连接信息就可以使用JPA功能。
Application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver
实体类:Employee.java
@Table(name="tal_employee") @Entity public class Employee implements Serializable{ @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @Column(name="last_Name") private String lastName; private String email; private String gender; //get set 省略 }
EmployeeDao接口:
public interface EmployeeDao extends JpaRepository<Employee, Integer>{ }
EmployeeController.java:
@Controller public class EmployeeController { @Autowired private EmployeeDao employeeDao; @ResponseBody @RequestMapping("/emps") public List<Employee> getEmployees(){ List<Employee> employees = employeeDao.findAll(); System.out.println(employees); return employees; } }
引入依赖:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--引入对JDBC的支持--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--引入对logging的支持--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency> <!-- SpringBoot MyBatis启动器 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies>
配置application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver ##############datasource classpath 数据连接池地址############## #spring.datasource.type=com.alibaba.druid.pool.DruidDataSource #指定我们的mapper.xml位置 欢迎关注公众号 Web项目聚集地 mybatis.mapper-locations=classpath:com/simple/springboot/mybatis/dao/mapper/*.xml #entity.class 指定我们实体类所在包位置 mybatis.type-aliases-package=com.simple.springboot.mybatis.entity
当然这里还有很多属性如果想要使用可以参考官方文档。到了这里其他就不写了,把他当作SSM使用就ok。
AOP功能使用注意事项:在我们的Dao层接口中一定要在类上加上注解@Mapper否则无法扫描到。
在我们SpringBoot中使用AOP非常简单。
@Aspect @Component public class SpringBootAspect { /** * 定义一个切入点 * @author:SimpleWu * @Date:2018年10月12日 */ @Pointcut(value="execution(* com.simple.springboot.util.*.*(..))") public void aop(){} /** * 定义一个前置通知 * @author:SimpleWu * @Date:2018年10月12日 */ @Before("aop()") public void aopBefore(){ System.out.println("前置通知 SpringBootAspect....aopBefore"); } /** * 定义一个后置通知 欢迎关注公众号 Web项目聚集地 * @author:SimpleWu * @Date:2018年10月12日 */ @After("aop()") public void aopAfter(){ System.out.println("后置通知 SpringBootAspect....aopAfter"); } /** * 处理未处理的JAVA异常 * @author:SimpleWu * @Date:2018年10月12日 */ @AfterThrowing(pointcut="aop()",throwing="e") public void exception(Exception e){ System.out.println("异常通知 SpringBootAspect...exception .." + e); } /** * 环绕通知 * @author:SimpleWu * @throws Throwable * @Date:2018年10月12日 */ @Around("aop()") public void around(ProceedingJoinPoint invocation) throws Throwable{ System.out.println("SpringBootAspect..环绕通知 Before"); invocation.proceed(); System.out.println("SpringBootAspect..环绕通知 After"); } }
SpringBoot已经集成好一个调度功能。
@Component public class ScheduledTasks { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); /** * 任务调度,每隔5秒执行一次,欢迎关注公众号 Web项目聚集地 * @author:SimpleWu * @Date:2018年10月12日 */ @Scheduled(fixedRate = 1000) public void reportCurrentTime() { System.out.println("现在时间:" + dateFormat.format(new Date())); } }
然后启动的时候我们必须要在主函数类上加上注解:@EnableScheduling(翻译过来就是开启调度)
/** * SpringBoot使用任务调度 * @EnableScheduling标注程序开启任务调度 * @author :SimpleWu * @Date:2018年10月12日 */ @SpringBootApplication @EnableScheduling public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }