Spring Boot
Spring Boot是为了简化Spring应用的创建、运行、调试、部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置。
简单来说,它提供了一堆依赖打包,并已经按照使用习惯解决了依赖问题---习惯大于约定。
HelloWorld
首先在Eclipse上安装STS插件
安装完成之后新建Spring项目。选择Spring Starter Project
在pom文件中增加关于web的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
没有问题的话,我们就可以开始编写Controller了。
@RestController
public class HelloController {
@RequestMapping(value="/hello", method=RequestMethod.GET)
public String HelloController() {
return "Hello World!";
}
}
编写完成之后如何启动呢?
找到Application,选择Run AS Spring Boot App。就启动了项目。
只需要浏览器键入localhost:8080/hello就可以进行访问了。
非常的简单!!!使我们更加专注于业务逻辑的开发。
如果我们增加web依赖的时候,使用mvn dependency:tree来打印项目依赖树的话,如下图所示。
可以发现,增加了许多的依赖包,webmvc,aop,jackson,tomcat等等。可以说一般web应用开发所需要的包都增加了。所以我们事实上默认的是采用tomcat启动的web应用。
属性配置
在application.properties或application.yml中配置,是Spring boot的应用配置文件。
在application.yml文件中,可以进行应用属性的修改。
例如:
server:
port: 8081
context-path: /helloworld
修改了web应用启动的端口以及增加了启动项目名,也就是要访问localhost:8081/helloworld/hello才能访问到原本的Controller。
自定义属性配置
在applicaion.yml文件中,我们可以定义一些自己的属性。
例如:
myAtt1: 10
myAtt2: attribute2
我们只需要在想要获取属性的地方使用@Value注解就可以获取属性的值。
例如:
@Value("${myAtt1}")
private int myAtt1;
如果我们有很多自定义属性,获取的话写很多个@Value,那多麻烦。所以Spring Boot提供了一种将属性注入一个类中的方法。
例如我们存在属性name和password,他们都同属于一个User类中。那配置文件中如何编写呢?
user:
username: name
password: password
并且我们需要提供一个类去承载这些属性,也就是一个model。并且使用@ConfigurationProperties
@Component
@ConfigurationProperties(prefix="user")
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
最后增加上@Component注解,让其注册为bean,并且使用@Autowired注解就可以获取到我们的属性了。
@Autowired
private User user;
那么问题又来了,在开发当中,一般来说,测试和实际应用中的配置是不同的,在Spring中,我们只需要修改web.xml中的DispatcherServlet或ContentLoaderListener中加载的配置文件就可以做到测试和实际应用切换非常迅速。
但在Spring Boot中,现在暂时好像都是通过默认加载application.yml,如此依赖,测试和实际应用的切换不是很麻烦?需要经常修改很多属性配置?
我们可以通过这么一种方式去达到切换的目的:
首先新建两个yml文件。
在applicaion.yml文件中增加如下配置:
spring:
profiles:
active: dev
这样,就相当于import applicatin-dev中的属性。
当我们需要切换的时候,只需要稍微修改一下active中的值,就可以轻松达到切换的效果了。
数据库访问
这里使用Spring-data-jpa进行数据库访问。
pom文件增加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
application.yml文件配置属性:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: root
password: root
jpa:
hibernate:
ddl-auto: create
show-sql: true
还需要一个model:User类
@Entity
public class User {
@Id
@GeneratedValue
private int id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private Integer age;
public User() {}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
最后,我们只需要定义一个接口,继承JpaRepository就可以使用其中的save(),delete()等方法实现CRUD。
public interface UserRepository extends JpaRepository<User, Integer>{
}
当然,我们也可以定义自己的持久化方法。
public interface UserRepository extends JpaRepository<User, Integer> {
User findByName(String name);
}
只需要简单的声明这么一个方法,就可以使用了。