springboot配置內(nèi)存數(shù)據(jù)庫H2教程詳解
業(yè)務(wù)背景:因soa系統(tǒng)要供外網(wǎng)訪問,處于安全考慮用springboot做了個(gè)前置模塊,用來轉(zhuǎn)發(fā)外網(wǎng)調(diào)用的請(qǐng)求和soa返回的應(yīng)答。其中外網(wǎng)的請(qǐng)求接口地址在DB2數(shù)據(jù)庫中對(duì)應(yīng)專門的一張表來維護(hù),要是springboot直接訪問數(shù)據(jù)庫,還要專門申請(qǐng)權(quán)限等,比較麻煩,而一張表用內(nèi)置的H2數(shù)據(jù)庫維護(hù)也比較簡單,就可以作為替代的辦法。
環(huán)境:springboot+maven3.3+jdk1.7
1.springboot的Maven工程結(jié)構(gòu)

說明一下,resource下的templates文件夾沒啥用。我忘記刪掉了。。。
2. 首先引入依賴jar包 pom.xml
<!--?xml version="1.0" encoding="UTF-8"?-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelversion>4.0.0</modelversion>
<groupid>com.zlf</groupid>
spring-boot</artifactid>
<version>1.0-SNAPSHOT</version>
<!-- 增加父pom ,spring-boot-starter-parent包含了大量配置好的依賴管理,他是個(gè)特殊的starter,它提供了有用的maven默認(rèn)設(shè)置 -->
<parent>
<groupid>org.springframework.boot</groupid>
spring-boot-starter-parent</artifactid>
<version>1.4.3.RELEASE</version>
</parent>
<!-- Spring默認(rèn)使用jdk1.6,如果你想使用jdk1.8,你需要在pom.xml的屬性里面添加java.version,如下: -->
<properties>
<project.build.sourceencoding>UTF-8</project.build.sourceencoding>
<tomcat.version>7.0.72</tomcat.version>
<java.version>1.8</java.version>
</properties>
<!-- Spring通過添加spring-boot-starter-*這樣的依賴就能支持具體的某個(gè)功能。 -->
<!-- 我們這個(gè)示例最終是要實(shí)現(xiàn)web功能,所以添加的是這個(gè)依賴。 -->
<dependencies>
<dependency>
<!-- 指定為Web應(yīng)用,并啟動(dòng)一個(gè)內(nèi)嵌的Servlet容器(默認(rèn)是Tomcat)用于處理HTTP請(qǐng)求 -->
<groupid>org.springframework.boot</groupid>
spring-boot-starter-web</artifactid>
</dependency>
<!-- 對(duì)Java 持久化API的支持,包括spring-data-jap,spring-orm,Hibernate-->
<dependency>
<groupid>org.springframework.boot</groupid>
spring-boot-starter-data-jpa</artifactid>
</dependency>
<!-- lombok插件,方便model對(duì)象的處理 -->
<dependency>
<groupid>org.projectlombok</groupid>
lombok</artifactid>
</dependency>
<!-- 內(nèi)嵌數(shù)據(jù)庫 -->
<dependency>
<groupid>com.h2database</groupid>
h2</artifactid>
</dependency>
<!-- mysql驅(qū)動(dòng) -->
<!-- <dependency> -->
<!-- <groupId>mysql</groupId> -->
<!-- mysql-connector-java</artifactId> -->
<!-- </dependency> -->
<dependency>
<groupid>junit</groupid>
junit</artifactid>
<scope>test</scope>
</dependency>
<!-- <dependency> -->
<!-- <groupId>javax.servlet</groupId> -->
<!-- jstl</artifactId> -->
<!-- </dependency> -->
</dependencies>
<build>
<!-- 打包后的jar包名稱 -->
<finalname>example</finalname>
<plugins>
<plugin>
<groupid>org.springframework.boot</groupid>
<!-- 必須要的SpringBoot繼承的maven插件,缺少了無法打包jar。 -->
spring-boot-maven-plugin</artifactid>
<dependencies>
<!-- 在我們開發(fā)過程中,我們需要經(jīng)常修改,為了避免重復(fù)啟動(dòng)項(xiàng)目,我們可以啟用熱部署。 Spring-Loaded項(xiàng)目提供了強(qiáng)大的熱部署功能,
添加/刪除/修改 方法/字段/接口/枚舉 等代碼的時(shí)候都可以熱部署,速度很快,很方便。 想在Spring Boot中使用該功能非常簡單 ,就是在spring-boot-maven-plugin插件下面添加依賴: -->
<dependency>
<groupid>org.springframework</groupid>
springloaded</artifactid>
<version>1.2.5.RELEASE</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
3.在src/main/resource根目錄下進(jìn)行配置h2數(shù)據(jù)庫。
schema.sql中建表。可以見多個(gè)表。用分號(hào)隔開
CREATE TABLE staff( id char(20) not null primary key, name char(20), age INTEGER );
data.sql 為新建的表進(jìn)行初始化數(shù)據(jù)的操作??梢苑湃攵鄠€(gè)表的插入語句。
insert into staff values( 's01', '張三', 26 ); insert into staff values( 's02', '春天里asdglkj', 23 ); insert into staff values( 's03', '劉三', 26 ); insert into staff values( 's04', '萬里高空', 26 ); insert into staff values( 's05', '火影', 26 ); insert into staff values( 's06', 'xiaopang', 26 ); insert into staff values( 's07', '海賊王', 26 ); insert into staff values( 's08', '王者榮耀', 26 )
application.properties db2數(shù)據(jù)庫設(shè)置和控制臺(tái)現(xiàn)實(shí)設(shè)置等。
#spring.datasource.url = jdbc:mysql://localhost:3306/zhanglfdatabase #spring.datasource.username = root #spring.datasource.password = #spring.datasource.driverClassName = com.mysql.jdbc.Driver #數(shù)據(jù)庫支持多種連接模式和連接設(shè)置,不同的連接模式和連接設(shè)置是通過不同的URL來區(qū)分的,URL中的設(shè)置是不區(qū)分大小寫。內(nèi)存數(shù)據(jù)庫(私有) #jdbc:h2:mem: #內(nèi)存數(shù)據(jù)庫(被命名) #jdbc:h2:mem:<databasename> #jdbc:h2:mem:test_mem spring.datasource.url =jdbc:h2:mem:soa_service_api spring.datasource.username = root spring.datasource.password = root spring.datasource.driverClassName = org.h2.Driver #進(jìn)行該配置后,每次啟動(dòng)程序,程序都會(huì)運(yùn)行resources/schema.sql文件,對(duì)數(shù)據(jù)庫的結(jié)構(gòu)進(jìn)行操作,相當(dāng)于新建一個(gè)表。 spring.datasource.schema=classpath:schema.sql #進(jìn)行該配置后,每次啟動(dòng)程序,程序都會(huì)運(yùn)行resources/data.sql文件,對(duì)數(shù)據(jù)庫的數(shù)據(jù)操作,相當(dāng)于往表中插入數(shù)據(jù)。 spring.datasource.data=classpath:data.sql # 數(shù)據(jù)庫類型聲明 spring.jpa.database = H2 # 是否開啟查詢語句在控制臺(tái)打印 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 #開啟h2控制臺(tái)功能和訪問地址。 spring.h2.console.enabled=true spring.h2.console.path=/h2-console</databasename> 這里有必要強(qiáng)調(diào)H2數(shù)據(jù)庫設(shè)置的屬性: spring.datasource.url =jdbc:h2:mem:soa_service_api
因?yàn)閿?shù)據(jù)庫支持多種連接模式和連接設(shè)置,不同的連接模式和連接設(shè)置是通過不同的URL來區(qū)分的,URL中的設(shè)置是不區(qū)分大小寫。其中幾種常用的設(shè)置如下圖

前兩種對(duì)應(yīng)的效果是:
1. jdbc:h2:file:E:/data/H2 表示將初始化的數(shù)據(jù)和H2 Console控制臺(tái)執(zhí)行的數(shù)據(jù)保存到E盤下data/H2文件夾中,即使應(yīng)用重啟,數(shù)據(jù)不會(huì)丟失。
2. jdbc:h2:~/testdatabase這里就需要說明一下”~”這個(gè)符號(hào)在window操作系統(tǒng)下代表什么意思了,在Window操作系統(tǒng)下,”~”這個(gè)符號(hào)代表的就是當(dāng)前登錄到操作系統(tǒng)的用戶對(duì)應(yīng)的用戶目錄,所以testdatabase數(shù)據(jù)庫對(duì)應(yīng)的文件存放在登錄到操作系統(tǒng)的用戶對(duì)應(yīng)的用戶目錄當(dāng)中,比如我當(dāng)前是使用Administrator用戶登錄操作系統(tǒng)的,所以在”C:\Documents and Settings\Administrator.h2”目錄中就可以找到test數(shù)據(jù)庫對(duì)應(yīng)的數(shù)據(jù)庫文件了
持久化本地的問題:由于本地已經(jīng)存在表,而應(yīng)用每次啟動(dòng)都會(huì)創(chuàng)建表,導(dǎo)致下次啟動(dòng)時(shí)會(huì)啟動(dòng)報(bào)錯(cuò)。除非手動(dòng)注掉application.properties中新建表的配置,或則刪除本地對(duì)應(yīng)目錄的文件。
3.jdbc:h2:mem:soa_service_api、jdbc:h2:mem:~/.h2/url類似與這種配置的,表示將初始化和h2 console控制臺(tái)上操作的數(shù)據(jù)保存在內(nèi)存(mem-memory)
保存到內(nèi)存的問題:由于每次重啟應(yīng)用內(nèi)存釋放掉后,對(duì)應(yīng)的數(shù)據(jù)也會(huì)消失,當(dāng)然初始化的表+初始化數(shù)據(jù)就都沒了。然后重啟會(huì)從data.sql中重新初始化數(shù)據(jù),啟動(dòng)正常。但是你通過h2
console操作的其他數(shù)據(jù)則全部丟失。解決辦法是把在h2 console新添加的接口地址配置到data.sql中。然后重新啟動(dòng)才行。
4.h2的配置說完,下面開始進(jìn)行h2的測試代碼java文件部分,看看有沒有配置成功。我們用到JPA這個(gè)持久化的接口工具。
a.映射的pojo實(shí)體類-staffBo,注意點(diǎn)和說明都在代碼里了。
package com.zlf.bo;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Data//可以省略get+set方法。
@Entity
@Table(name="staff")//注解的name屬性值要和schema.sql定義的表名一致。不然啟動(dòng)雖然不報(bào)錯(cuò),但和表映射不上,就取不到任何值。
public class StaffBo implements Serializable {
private static final long serialVersionUID = 1L;
//主鍵是必須聲明的。不然啟動(dòng)會(huì)報(bào)實(shí)體中無定義主鍵的錯(cuò): No identifier specified for entity: com.zlf.bo.StaffBo
@Id
private String id;
// @Column(name="name") 如果表中字段名稱和這里的屬性名稱一樣,可以不同加Column注解。
private String name;
@Column(name="age")
private int age;
}
b.然后是類似與dao層接口的操作數(shù)據(jù)庫的接口,StaffRepository這個(gè)接口要繼承PagingAndSortingRepository才能實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的crud操作。
package com.zlf.repository;
import org.springframework.data.repository.PagingAndSortingRepository;
import com.zlf.bo.StaffBo;
public interface StaffRepository extends PagingAndSortingRepository<staffbo,string> {
}
</staffbo,string>
c. 然后就是service層的接口和實(shí)現(xiàn)類,在實(shí)現(xiàn)類中注入api接口的實(shí)例,并用實(shí)例操作數(shù)據(jù)庫,這里是h2數(shù)據(jù)庫。
package com.zlf.service;
import java.util.List;
import com.zlf.bo.StaffBo;
public interface IStaffService {
public List<staffbo> queryAllStaffList();
}
</staffbo>
這里我們只做了個(gè)查詢所有的操作。然后希望在頁面打印出來這些實(shí)體信息。
package com.zlf.service.impl;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zlf.bo.StaffBo;
import com.zlf.repository.StaffRepository;
import com.zlf.service.IStaffService;
@Service
public class StaffServiceImpl implements IStaffService {
@Autowired
private StaffRepository staffRepository;
@Override
public List<staffbo> queryAllStaffList() {
Iterable<staffbo> iterable = staffRepository.findAll();
List<staffbo> list=new ArrayList<staffbo>();
Iterator<staffbo> iterator = iterable.iterator();
while(iterator.hasNext()){
StaffBo next = iterator.next();
list.add(next);
}
return list;
}
}
</staffbo></staffbo></staffbo></staffbo></staffbo>
d. controller層
package com.zlf.controller;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.zlf.bo.StaffBo;
import com.zlf.service.IStaffService;
@Controller
@RequestMapping(path="/staff",produces="application/json;charset=utf-8")
public class StaffController {
private static final Logger logger=LoggerFactory.getLogger(StaffController.class);
@Autowired
private IStaffService staffService;
@RequestMapping("/getList")
@ResponseBody
public List<staffbo> getAllList(){
List<staffbo> staffList=null;
try {
staffList = staffService.queryAllStaffList();
} catch (Exception e) {
logger.error("查詢失敗");
}
return staffList;
}
}
</staffbo></staffbo>
e. 重點(diǎn)來了–應(yīng)用的啟動(dòng)入口Application.java
這個(gè)java類最好放到和其他層級(jí)同級(jí)的根目錄中,這里就是com.zlf下,因?yàn)檫@個(gè)類的注解@SpringBootApplication會(huì)默認(rèn)掃描與它同級(jí)目錄的其他文件。這樣才能完成注入等操作。如果你把它放到了和其他層的代碼一樣的級(jí)別中,則要用這種注解才行。
比如mianApplication下的Application.java,就是我說的另一種放到和其他層同級(jí)的結(jié)構(gòu)中的情形。

它應(yīng)該如何配置才能正常啟動(dòng)呢?
package mainApplication;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* Spring Boot建議將我們main方法所在的這個(gè)主要的配置類配置在根包名下。
*
* @author Administrator
*
*
* @SpringBootApplication是Spring Boot提供的注解,他相當(dāng)于加上如下注解:
* @Configuration,表明Application是一個(gè)Spring的配置對(duì)象,用于配置Spring應(yīng)用上下文。
* @EnableAutoConfiguration,Spring Boot會(huì)根據(jù)類路徑(classpath)以及一些屬性值來自動(dòng)完成一些配置行為,例如:開發(fā)基于Spring
* MVC的Web應(yīng)用,需要在配置中加上
* @EnableWebMvc直接來激活一些默認(rèn)的Web配置, 一旦Spring Boot發(fā)現(xiàn)運(yùn)行時(shí)類路徑上包含了 spring-webmvc
* 依賴,它會(huì)自動(dòng)的完成一個(gè)Web應(yīng)用的基本配置
* ——例如配置DispatcherServlet等等。
* @ComponenScan告知Spring應(yīng)用從什么位置去發(fā)現(xiàn)Spring構(gòu)件(@Component, @Service,
* @Configuration)等等
*/
@SpringBootApplication
@Controller
// @RestController因?yàn)槲覀兝邮菍懸粋€(gè)web應(yīng)用,因此寫的這個(gè)注解,這個(gè)注解相當(dāng)于同時(shí)添加@Controller和@ResponseBody注解
// @EnableAutoConfiguration// Spring Boot會(huì)自動(dòng)根據(jù)你jar包的依賴來自動(dòng)配置項(xiàng)目的數(shù)據(jù)源依賴
@ComponentScan(basePackages = { "controller", "service", "dao" })
// @ComponentScan路徑被默認(rèn)設(shè)置為SampleController的同名package,也就是該package下的所有@Controller
// ,@Service , @Component, @Repository都會(huì)被實(shí)例化后并加入Spring Context中。這也是為什么要把這個(gè)類最好放到與其他包同級(jí)目錄 的原因了。
public class Application {
@RequestMapping("")
public String home() {
// return "xiaozhang ,Hello World!";
return "/index";
}
public static void main(String[] args) {
// 啟動(dòng)Spring Boot項(xiàng)目最簡單的方法就是執(zhí)行下面的方法
SpringApplication.run(Application.class);
}
}
這樣就完成了測試代碼的簡單開發(fā)。在application.java中右鍵run as java application ,啟動(dòng)程序。效果如下
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.4.3.RELEASE)
2017-07-05 20:50:07.579 INFO 5956 --- [ main] com.zlf.Application : Starting Application on pc-itwzhanglf02 with PID 5956 (E:\workspace\tsqa_springBoot2_hibernate_jpa\target\classes started by Administrator in E:\workspace\tsqa_springBoot2_hibernate_jpa)
2017-07-05 20:50:07.579 INFO 5956 --- [ main] com.zlf.Application : No active profile set, falling back to default profiles: default
2017-07-05 20:50:07.657 INFO 5956 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@50103bfb: startup date [Wed Jul 05 20:50:07 CST 2017]; root of context hierarchy
2017-07-05 20:50:09.655 INFO 5956 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [class org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$c3c549d9] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2017-07-05 20:50:10.094 INFO 5956 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2017-07-05 20:50:10.110 INFO 5956 --- [ main] o.apache.catalina.core.StandardService : Starting service Tomcat
2017-07-05 20:50:10.110 INFO 5956 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.72
2017-07-05 20:50:10.297 INFO 5956 --- [ost-startStop-1] org.apache.catalina.startup.TldConfig : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
2017-07-05 20:50:10.297 INFO 5956 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2017-07-05 20:50:10.297 INFO 5956 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2655 ms
2017-07-05 20:50:10.540 INFO 5956 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2017-07-05 20:50:10.540 INFO 5956 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'webServlet' to [/h2-console/*]
2017-07-05 20:50:10.540 INFO 5956 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2017-07-05 20:50:10.540 INFO 5956 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2017-07-05 20:50:10.540 INFO 5956 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2017-07-05 20:50:10.540 INFO 5956 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
2017-07-05 20:50:10.961 INFO 5956 --- [ main] o.s.jdbc.datasource.init.ScriptUtils : Executing SQL script from class path resource [schema.sql]
2017-07-05 20:50:10.976 INFO 5956 --- [ main] o.s.jdbc.datasource.init.ScriptUtils : Executed SQL script from class path resource [schema.sql] in 15 ms.
2017-07-05 20:50:10.992 INFO 5956 --- [ main] o.s.jdbc.datasource.init.ScriptUtils : Executing SQL script from class path resource [data.sql]
2017-07-05 20:50:10.992 INFO 5956 --- [ main] o.s.jdbc.datasource.init.ScriptUtils : Executed SQL script from class path resource [data.sql] in 0 ms.
2017-07-05 20:50:11.118 INFO 5956 --- [ main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default'
2017-07-05 20:50:11.133 INFO 5956 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [
name: default
...]
2017-07-05 20:50:11.227 INFO 5956 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {5.0.11.Final}
2017-07-05 20:50:11.227 INFO 5956 --- [ main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
2017-07-05 20:50:11.227 INFO 5956 --- [ main] org.hibernate.cfg.Environment : HHH000021: Bytecode provider name : javassist
2017-07-05 20:50:11.273 INFO 5956 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
2017-07-05 20:50:11.398 INFO 5956 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2017-07-05 20:50:11.793 INFO 5956 --- [ main] org.hibernate.tool.hbm2ddl.SchemaUpdate : HHH000228: Running hbm2ddl schema update
2017-07-05 20:50:11.840 INFO 5956 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2017-07-05 20:50:12.536 INFO 5956 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@50103bfb: startup date [Wed Jul 05 20:50:07 CST 2017]; root of context hierarchy
2017-07-05 20:50:12.626 INFO 5956 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[]}" onto public java.lang.String com.zlf.Application.home()
2017-07-05 20:50:12.629 INFO 5956 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/staff/getList],produces=[application/json;charset=utf-8]}" onto public java.util.List<com.zlf.bo.staffbo> com.zlf.controller.StaffController.getAllList()
2017-07-05 20:50:12.631 INFO 5956 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.map<java.lang.string, java.lang.object="">> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2017-07-05 20:50:12.632 INFO 5956 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2017-07-05 20:50:12.670 INFO 5956 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-07-05 20:50:12.670 INFO 5956 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-07-05 20:50:12.733 INFO 5956 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-07-05 20:50:13.232 INFO 5956 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2017-07-05 20:50:13.310 INFO 5956 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-07-05 20:50:13.310 INFO 5956 --- [ main] com.zlf.Application : Started Application in 6.213 seconds (JVM running for 6.478)
</java.util.map<java.lang.string,></com.zlf.bo.staffbo>
打開瀏覽器,訪問地址:http://localhost:8080/staff/getList,可以看到初始化的數(shù)據(jù)都出來了。

然后訪問地址:http://localhost:8080/h2-console出現(xiàn)下面的h2 console界面

在登陸頁面輸入在application.properties中配置的h2數(shù)據(jù)庫信息,登陸后可以看到左側(cè)已經(jīng)有我們初始化的表,查詢數(shù)據(jù),也能看到數(shù)據(jù)應(yīng)初始化進(jìn)來。則證明成功了!

以上所述是小編給大家介紹的springboot配置內(nèi)存數(shù)據(jù)庫H2教程詳解,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
springboot實(shí)現(xiàn)攔截器之驗(yàn)證登錄示例
本篇文章主要介紹了springboot實(shí)現(xiàn)攔截器之驗(yàn)證登錄示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
Java時(shí)間類Date類和Calendar類的使用詳解
這篇文章主要介紹了Java時(shí)間類Date類和Calendar類的使用詳解,需要的朋友可以參考下2017-08-08
java設(shè)計(jì)模式之外觀模式學(xué)習(xí)筆記
這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之外觀模式學(xué)習(xí)筆記,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
springboot整合jquery和bootstrap框架過程圖解
這篇文章主要介紹了springboot整合jquery和bootstrap框架過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
解決Maven項(xiàng)目本地公共common包緩存問題
這篇文章主要介紹了解決Maven項(xiàng)目本地公共common包緩存問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
java?CompletableFuture異步任務(wù)編排示例詳解
這篇文章主要為大家介紹了java?CompletableFuture異步任務(wù)編排示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11

