以前spring開發需要配置一大堆的xml,後臺spring加入了annotaion,使得xml配置簡化了很多,當然還是有些配置需要使用xml,比如申明component scan等。
Spring開了一個新的model spring boot,主要思想是降低spring的入門,使得新手可以以最快的速度讓程序在spring框架下跑起來。
一、Spring Boot啓動學習案例
1.新建一個Maven Java 工程
使用IDE(Eclipse,MyEclipse)工具新建一個Maven工程,可以是Maven Java Project,也可以是Maven Web Project,隨便取一個工程名稱。我使用的是eclipse
2.在pom.xml文件中添加Spring Boot Maven依賴
(1)添加依賴管理。spring-boot-starter-parent,引入以後在申明其它dependency的時候就不需要version了
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
(2)Maven Web。因爲我們開發的是web工程,所以需要在pom.xml中引入spring-boot-starter-web,spring官方解釋說spring-boot-start-web包含了spring webmvc和tomcat等web開發的特性
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
(3) Maven Run Application。如果我們要直接Main啓動spring,那麼以下plugin必須要添加,否則是無法啓動的。如果使用maven 的spring-boot:run的話是不需要此配置的。spring boot加上這個插件,纔可以使用Java -jar命令來啓動jar包,並且有了這個插件,打的包裏面纔會有maven依賴的jar包和spring boot的啓動類,所以打的jar包也就比較大,而且MANIFEST.MF文件裏面也會有啓動類的信息。但是如果不加這個插件,則打的包裏面就只有class文件, 沒有依賴的Jar包,MANIFEST.MF文件裏面也沒有啓動類的信息,所以如果不加這個插件就不能獨立啓動。注意:在用idea調試的時候加不加插件都可以啓動,看不出來不同,所以必須要獨立啓動jar包纔可以看出來。而且如果用了spring boot但是不需要獨立啓動,就不要加這個插件,否則spring boot會因爲找不到啓動類而導致報錯。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin </artifactId>
</plugin>
</plugins>
</build>
3.編寫啓動類
真正的程序開始啦,我們需要一個啓動類,然後在啓動類申明讓spring boot自動給我們配置spring需要的配置,比如:@SpringBootApplication,爲了可以儘快讓程序跑起來,我們簡單寫一個通過瀏覽器訪問hello world字樣的例子:
@RestController
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@RequestMapping("/")
public String hello() {
return "hello springboot!!!!!!";
}
}
其中@SpringBootApplication申明讓spring boot自動給程序進行必要的配置,等價於以默認屬性使用@Configuration,@EnableAutoConfiguration和@ComponentScan
@RestController返回json字符串的數據,直接可以編寫RESTFul的接口,等價於@Controller + @ResponseBody。但使用@RestController這個註解,就不能返回jsp、html頁面,視圖解析器無法解析jsp、html頁面,這時需要使用@Controller註解。
以上代碼的寫法也可以寫成兩個類,即啓動器@SpringBootApplication和@RestController或@Controller分開的方式。效果是一樣的。如:
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
@RestController// 標記爲:restful
public class HelloController {
@RequestMapping("/")
public String hello(){
return "Hello world!";
}
}
4.運行程序
有兩種運行方式:
第一種:右鍵Run As -> Java Application。打開瀏覽器輸入地址:http://127.0.0.1:8080/ 就可以看到Hello world!了。
第二種:右鍵project – Run as – Maven build – 在Goals裏輸入spring-boot:run ,然後Apply,最後點擊Run。
@RequestMapping("/byZero")
public int zeroException(){
return 100/0;
}
@RequestMapping("/UserDo")
public UserDo userDo(){
UserDo user = new UserDo();
user.setId(2);
user.setName("mengxh");
return user;
}
二、springboot 數據庫連接
application.properties配置
########################################################
###datasource
########################################################
spring.datasource.url = jdbc:mysql://localhost:3309/springboot?characterEncoding=utf8&useSSL=true
spring.datasource.username = root
spring.datasource.password = AKE124
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
########################################################
### Java Persistence Api
########################################################
# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager)
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
pom.xml中加入依賴
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
實體類UserDo
@Entity
@Table(name="user")
public class UserDo {
@Id @GeneratedValue
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
UserRepository
package com.mxh.test.app.dao;
import org.springframework.data.repository.CrudRepository;
import com.mxh.test.app.bean.UserDo;
public interface UserRepository extends CrudRepository<UserDo, Integer> {
}
UserService
package com.mxh.test.app.server;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import org.springframework.stereotype.Service;
import com.mxh.test.app.bean.UserDo;
import com.mxh.test.app.dao.UserRepository;
@Service
public class UserService {
@Resource
private UserRepository userRepository;
@Transactional
public void saveUser(UserDo user){
userRepository.save(user);
}
}
UserController
package com.mxh.test.app.controller;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.mxh.test.app.bean.UserDo;
import com.mxh.test.app.server.UserService;
@RestController
@RequestMapping("/User")
public class UserController {
@Resource
private UserService userService;
@RequestMapping("/saveUser")
public String saveUser(){
UserDo user = new UserDo();
user.setName("zzz");
userService.saveUser(user);
return "userSave success!!";
}
}