springboot配置內(nèi)存數(shù)據(jù)庫(kù)H2教程詳解
業(yè)務(wù)背景:因soa系統(tǒng)要供外網(wǎng)訪問(wèn),處于安全考慮用springboot做了個(gè)前置模塊,用來(lái)轉(zhuǎn)發(fā)外網(wǎng)調(diào)用的請(qǐng)求和soa返回的應(yīng)答。其中外網(wǎng)的請(qǐng)求接口地址在DB2數(shù)據(jù)庫(kù)中對(duì)應(yīng)專門的一張表來(lái)維護(hù),要是springboot直接訪問(wèn)數(shù)據(jù)庫(kù),還要專門申請(qǐng)權(quán)限等,比較麻煩,而一張表用內(nèi)置的H2數(shù)據(jù)庫(kù)維護(hù)也比較簡(jiǎn)單,就可以作為替代的辦法。
環(huán)境:springboot+maven3.3+jdk1.7
1.springboot的Maven工程結(jié)構(gòu)
說(shuō)明一下,resource下的templates文件夾沒(méi)啥用。我忘記刪掉了。。。
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通過(guò)添加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ù)庫(kù) --> <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插件,缺少了無(wú)法打包jar。 --> spring-boot-maven-plugin</artifactid> <dependencies> <!-- 在我們開(kāi)發(fā)過(guò)程中,我們需要經(jīng)常修改,為了避免重復(fù)啟動(dòng)項(xiàng)目,我們可以啟用熱部署。 Spring-Loaded項(xiàng)目提供了強(qiáng)大的熱部署功能, 添加/刪除/修改 方法/字段/接口/枚舉 等代碼的時(shí)候都可以熱部署,速度很快,很方便。 想在Spring Boot中使用該功能非常簡(jiǎn)單 ,就是在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ù)庫(kù)。
schema.sql中建表。可以見(jiàn)多個(gè)表。用分號(hào)隔開(kāi)
CREATE TABLE staff( id char(20) not null primary key, name char(20), age INTEGER );
data.sql 為新建的表進(jìn)行初始化數(shù)據(jù)的操作??梢苑湃攵鄠€(gè)表的插入語(yǔ)句。
insert into staff values( 's01', '張三', 26 ); insert into staff values( 's02', '春天里asdglkj', 23 ); insert into staff values( 's03', '劉三', 26 ); insert into staff values( 's04', '萬(wàn)里高空', 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ù)庫(kù)設(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ù)庫(kù)支持多種連接模式和連接設(shè)置,不同的連接模式和連接設(shè)置是通過(guò)不同的URL來(lái)區(qū)分的,URL中的設(shè)置是不區(qū)分大小寫。內(nèi)存數(shù)據(jù)庫(kù)(私有) #jdbc:h2:mem: #內(nèi)存數(shù)據(jù)庫(kù)(被命名) #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ù)庫(kù)的結(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ù)庫(kù)的數(shù)據(jù)操作,相當(dāng)于往表中插入數(shù)據(jù)。 spring.datasource.data=classpath:data.sql # 數(shù)據(jù)庫(kù)類型聲明 spring.jpa.database = H2 # 是否開(kāi)啟查詢語(yǔ)句在控制臺(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 #開(kāi)啟h2控制臺(tái)功能和訪問(wèn)地址。 spring.h2.console.enabled=true spring.h2.console.path=/h2-console</databasename> 這里有必要強(qiáng)調(diào)H2數(shù)據(jù)庫(kù)設(shè)置的屬性: spring.datasource.url =jdbc:h2:mem:soa_service_api
因?yàn)閿?shù)據(jù)庫(kù)支持多種連接模式和連接設(shè)置,不同的連接模式和連接設(shè)置是通過(guò)不同的URL來(lái)區(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這里就需要說(shuō)明一下”~”這個(gè)符號(hào)在window操作系統(tǒng)下代表什么意思了,在Window操作系統(tǒng)下,”~”這個(gè)符號(hào)代表的就是當(dāng)前登錄到操作系統(tǒng)的用戶對(duì)應(yīng)的用戶目錄,所以testdatabase數(shù)據(jù)庫(kù)對(duì)應(yīng)的文件存放在登錄到操作系統(tǒng)的用戶對(duì)應(yīng)的用戶目錄當(dāng)中,比如我當(dāng)前是使用Administrator用戶登錄操作系統(tǒng)的,所以在”C:\Documents and Settings\Administrator.h2”目錄中就可以找到test數(shù)據(jù)庫(kù)對(duì)應(yīng)的數(shù)據(jù)庫(kù)文件了
持久化本地的問(wèn)題:由于本地已經(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)存的問(wèn)題:由于每次重啟應(yīng)用內(nèi)存釋放掉后,對(duì)應(yīng)的數(shù)據(jù)也會(huì)消失,當(dāng)然初始化的表+初始化數(shù)據(jù)就都沒(méi)了。然后重啟會(huì)從data.sql中重新初始化數(shù)據(jù),啟動(dòng)正常。但是你通過(guò)h2
console操作的其他數(shù)據(jù)則全部丟失。解決辦法是把在h2 console新添加的接口地址配置到data.sql中。然后重新啟動(dòng)才行。
4.h2的配置說(shuō)完,下面開(kāi)始進(jìn)行h2的測(cè)試代碼java文件部分,看看有沒(méi)有配置成功。我們用到JPA這個(gè)持久化的接口工具。
a.映射的pojo實(shí)體類-staffBo,注意點(diǎn)和說(shuō)明都在代碼里了。
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í)體中無(wú)定義主鍵的錯(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ù)庫(kù)的接口,StaffRepository這個(gè)接口要繼承PagingAndSortingRepository才能實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的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ù)庫(kù),這里是h2數(shù)據(jù)庫(kù)。
package com.zlf.service; import java.util.List; import com.zlf.bo.StaffBo; public interface IStaffService { public List<staffbo> queryAllStaffList(); } </staffbo>
這里我們只做了個(gè)查詢所有的操作。然后希望在頁(yè)面打印出來(lái)這些實(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)來(lái)了–應(yīng)用的啟動(dòng)入口Application.java
這個(gè)java類最好放到和其他層級(jí)同級(jí)的根目錄中,這里就是com.zlf下,因?yàn)檫@個(gè)類的注解@SpringBootApplication會(huì)默認(rèn)掃描與它同級(jí)目錄的其他文件。這樣才能完成注入等操作。如果你把它放到了和其他層的代碼一樣的級(jí)別中,則要用這種注解才行。
比如mianApplication下的Application.java,就是我說(shuō)的另一種放到和其他層同級(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)以及一些屬性值來(lái)自動(dòng)完成一些配置行為,例如:開(kāi)發(fā)基于Spring * MVC的Web應(yīng)用,需要在配置中加上 * @EnableWebMvc直接來(lái)激活一些默認(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包的依賴來(lái)自動(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)目最簡(jiǎn)單的方法就是執(zhí)行下面的方法 SpringApplication.run(Application.class); } }
這樣就完成了測(cè)試代碼的簡(jiǎn)單開(kāi)發(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>
打開(kāi)瀏覽器,訪問(wèn)地址:http://localhost:8080/staff/getList,可以看到初始化的數(shù)據(jù)都出來(lái)了。
然后訪問(wèn)地址:http://localhost:8080/h2-console出現(xiàn)下面的h2 console界面
在登陸頁(yè)面輸入在application.properties中配置的h2數(shù)據(jù)庫(kù)信息,登陸后可以看到左側(cè)已經(jīng)有我們初始化的表,查詢數(shù)據(jù),也能看到數(shù)據(jù)應(yīng)初始化進(jìn)來(lái)。則證明成功了!
以上所述是小編給大家介紹的springboot配置內(nèi)存數(shù)據(jù)庫(kù)H2教程詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Spring Boot獲取微信用戶信息的超簡(jiǎn)單方法
這篇文章主要給大家介紹了關(guān)于Spring Boot獲取微信用戶信息的超簡(jiǎn)單方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09springboot實(shí)現(xiàn)攔截器之驗(yàn)證登錄示例
本篇文章主要介紹了springboot實(shí)現(xiàn)攔截器之驗(yàn)證登錄示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02Action訪問(wèn)Servlet的API的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇Action訪問(wèn)Servlet的API的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06Java時(shí)間類Date類和Calendar類的使用詳解
這篇文章主要介紹了Java時(shí)間類Date類和Calendar類的使用詳解,需要的朋友可以參考下2017-08-08java設(shè)計(jì)模式之外觀模式學(xué)習(xí)筆記
這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之外觀模式學(xué)習(xí)筆記,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10springboot整合jquery和bootstrap框架過(guò)程圖解
這篇文章主要介紹了springboot整合jquery和bootstrap框架過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12解決Maven項(xiàng)目本地公共common包緩存問(wèn)題
這篇文章主要介紹了解決Maven項(xiàng)目本地公共common包緩存問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09java?CompletableFuture異步任務(wù)編排示例詳解
這篇文章主要為大家介紹了java?CompletableFuture異步任務(wù)編排示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11