步骤
新建一个maven的java 工程
命名为spring-boot-h2
添加相关依赖
在pom.xml文件添加相关依赖主要是有三个部分。
增加父工程spring-boot-starter-parent
主要作用:
- 配置java版本和其它配置文件
- 依赖管理器,管理依赖库的版本
- 设置默认插件的配置
1 2 3 4 5
| <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.3.RELEASE</version> </parent>
|
增加spring boot 的web依赖和jpa依赖,及h2数据库的依赖
1 2 3 4 5 6 7 8 9 10 11 12 13
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency>
|
编写启动类
使用@SpringBootApplication
注解把要运行的类注解。
1 2 3 4 5 6
| @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
|
编写实体类
用@Entity
注解实体类,@Id
与@GeneratedValue
指明主键与生成方式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| @Entity public class DemoEntity { @Id @GeneratedValue private long id; private String title; private String content;
public DemoEntity() { }
public DemoEntity(String title, String content) { this.title = title; this.content = content; } }
|
编写持久层接口
持久层接口继承于spring的curl接口。
CrudRepository
中完成了基本增删改查的定义。
1 2 3
| public interface DemoRepository extends CrudRepository<DemoEntity,Long>{
}
|
编写控制层类
使用@RestController
注解控制层的类,指明使用rest方式,相当于给类中所有方法加了@ResponseBody
注解。
@Autowired
自动注入持久层的类。这里只是演示,也比较简单,就没用到服务层。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| @RestController public class DemoController {
@Autowired private DemoRepository demoInfoRepository;
@RequestMapping("/save") public String save() { demoInfoRepository.save(new DemoEntity("title1", "content1")); demoInfoRepository.save(new DemoEntity("title2", "content2")); demoInfoRepository.save(new DemoEntity("title3", "content3")); demoInfoRepository.save(new DemoEntity("title4", "content4")); demoInfoRepository.save(new DemoEntity("title5", "content5")); return "save ok"; }
@RequestMapping("/findAll") public Iterable<DemoEntity> findAll(){ return demoInfoRepository.findAll(); } }
|
运行
运行App类
依次访问:
http://127.0.0.1:8080/findAll 此时没有数据;
http://127.0.0.1:8080/save 保存测试数据;
http://127.0.0.1:8080/findAll 会看到save进入的数据;
重新启动App.java,在访问:
http://127.0.0.1:8080/findAll 此时没有数据,重启之后就释放了之前存入的数据。
打包成独立的jar包
如果要打包成独立的jar包的话,要增加spring-boot-maven-plugin
插件。
1 2 3 4
| <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
|
再运行mvn package
就是含依赖的能独立运行的jar包。
说明一点,在这里好像就不能用maven-assembly-plugin
来打包了,反正每次打包之后的文件都不能运行。
运行spring-boot:run
可直接运行springboot程序。
前提是代码中只有一个main
函数。
如果什么控制器都不写,则返回这样的json数据。
{"timestamp":xxx,"status":404,"error":"Not Found","message":"No message available","path":"/"}
其它扩展
替换hsqldb
替换依赖就行
1 2 3 4 5
| <dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> <scope>runtime</scope> </dependency>
|
显示sql
在resources目录下新建application.properties文件
加入
数据库持久化
在application.properties中加入
1 2 3 4 5
| spring.datasource.url = jdbc:h2:file:~/.h2/testdb spring.datasource.username = sa spring.datasource.password = sa spring.datasource.driverClassName = org.h2.Driver spring.jpa.hibernate.ddl-auto = update
|
spring-boot项目在外部tomcat环境下部署
1
| <packaging>war</packaging>
|
- 还是在pom.xml文件中,dependencies下面添加
1 2 3 4 5
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
|
spring-boot更加强大的一点就是:即便项目是以上配置,依然可以用内嵌的tomcat来调试,启动命令和以前没变,还是:mvn spring-boot:run
。
参考
工程源码地址https://github.com/finghine/spring-boot-h2-exmaple