在目前的web项目开发中,spring框架大量使用。但随着项目“体积”的增大,各个方面的配置文件充斥着整个项目,造成项目的开发、管理和维护称为一件头痛的事。
而Pivotal团队提供的全新框架spring boot为开发者提供另一种框架开发解决方案,它遵循“约定大于配置”的原则,减少了配置文件的存在,也可以说对项目几乎是零配置,大大提高了开发效率。
本章主要针对spring boot做简单的环境搭建,一为自己学习该框架做学习记录,二为刚入手spring boot的朋友提供一个共同学习的空间。因个人能力有限,如有不正确的地方望批评指正。
下面进入正题:
一、新建一个maven工程
使用spring boot新建maven工程不在需要建立maven web工程,只要一般的maven工程就好了。
二、maven包的导入
清单如下:
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.1.BUILD-SNAPSHOT</version>
</parent>
<!-- Add typical dependencies for a web application -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- spring data jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- mysql driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 其他依赖 -->
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
</dependencies>
<!-- Package as an executable jar -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 编译器版本指定 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<!-- Add Spring 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>
<repositories>
<repository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/snapshot</url>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<url>http://repo.spring.io/milestone</url>
</repository>
</repositories>
以上为整个spring boot 构建简单web项目所需要的maven配置文件。
spring-boot-starter-parent:为方便使用,打包了一些比较常用的jar包放在一个包中,开发者只要使用这个包,就可以减少很多包的导入。同时,也可以选择不是用,而根据自己的情况选择性的导入。注:但在我简单的使用过程中发现有的包无法成功下载,导致maven报错,如果有这种情况,请自行添加。
spring-boot-starter-web:该包为web开发包的集合,其中包括tomcat、springMVC等包。
spring-boot-starter-data-jpa:该包为java持久化api的支持,其中包括spring-data-jpa、spring-orm和一些hibernate相关依赖。
其他常用的一些包这里就不在赘述,此外对于repositories的配置,根据官网的解释,如果你使用的是.RELEASE版本的包,可以不添加。
二、代码实现(该示例只为演示效果,所以设计得都很简单)
1、创建实体类
package com.whucker.platform.domain;
@Entity //实体
@Table(name="t_user") //指定表名
public class User {
@Id //定义主键id
@GeneratedValue(strategy=GenerationType.AUTO) //自增
private Long id;
private String name;
private int age;
private int gender;
//...此处省略get/set
}
2、Repository代码(此处使用的是spring data jpa,由于该文章主要讲解spring boot,所有不在此对jpa做解释)
package com.whucker.platform.repository;
public interface UserRepository extends CrudRepository<User, Long>{
}
*注意:此处在很多博客中我们看到在接口的上方添加@Repository注解,其实并不需要。
3、业务层
(1)接口定义
package com.whucker.platform.service;
public interface IUserService {
//添加
void save(User user);
//删除
void delete(Long id);
//修改
void update(User user);
//查询单个对象
User findOne(Long id);
//查询所有
List<User> findAll();
}
(2)接口实现
package com.whucker.platform.service.impl;
@Service(value="userService")
@Transactional
public class UserServiceImpl implements IUserService{
@Autowired
private UserRepository userRepository;
@Override
public void save(User user) {
this.userRepository.save(user);
}
//...此处省略部分代码
}
此处应该注意,@Autowired注入的是jpa框架为我们实现的repository,详情请了解spring-data-jpa,这里就不再过多解释。
4、控制层
package com.whucker.platform.controler;
@RestController
public class IndexManageAction {
@RequestMapping(value="/")
public String index(){
return "欢迎访问首页!";
}
}
这里的@RestController实际是spring boot为restful风格提供的注解,这样真个Action就支持restful风格的编码了。
5、Application类
package com.whucker.platform;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
此处是真个项目启动的入口。@SpringBootApplication注解整合了部分注解,只需要使用这一个注解就行了。后面我们对spring boot所提供的常用注解进行解释说明时在做详细的分析,这里不再赘述。
6、最后一个是配置文件。
可能有的朋友会说:你不是说spring boot零配置吗,怎么最后还是会有配置文件。其实仔细想想就明白了,其他不配置,至少你用的数据库是什么、账号密码是什么,这些信息总该告诉框架,不然他怎么知道采用什么策略去连接操作呢。因为是基础教程,所以上一个”最低配置”。
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/spring-boot-db
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
这些配置我们默认把它放到项目跟目录下的resoucese文件当中,文件名为:application.properties。为什么要用这个名字,相信大家都能猜到,spring boot采用约定大于配置,这样命名配置文件,框架启动时会自动到项目的根目录查找约定好的配置文件并进行加载。
我想这些配置大家都很熟悉了,这里就不再做过多的讲述了。其实spring boot根据不同框架,不同环境还有相当多得配置,后面慢慢会接触到。
最后在提一点,也是我在写demo的时候遇到的一个问题,项目总是启动不起来,最终发现的一个问题。相信细心的朋友已经发现,我在贴代码的时候没有贴导入的包,但是每段代码都贴了该段代码所属包。如果你把所有的包名放一起你会发现,启动项目的Application类的位置有点不同,他最接近项目的根部。只有把启动类放到最外层,它在启动的时候才能扫描所有目录下的注解,并注入bean,否则将出现有些bean无法注入的情况。当然,如果你有代码洁癖,觉得这样放不舒服,也可以单独建个包把启动类放里面,不过这样你将要更改你在Application类上的注解。后面我们会讲到。
到此,真个换将搭建完成。由于是第一次写博客,很多地方可以考虑的不是很周到,有些地方语言组织不是很到位,如果有疑问,欢迎留言。同时在整个说明中如果有错误或者不恰当的地方,欢迎大家批评指出,我将及时作出改正。