美高梅平台下载-美高梅娱乐平台登录

热门关键词: 美高梅平台下载,美高梅娱乐平台登录

因为需要使用到这方面内容,starters可以简化Sp

日期:2019-10-06编辑作者:美高梅平台下载

本项目旨在把SpringBoot的特性展示出来,都是开发中经常用到的,可以留作SpringBoot使用备忘录,持续更新中。

原创作品,可以转载,但是请标注出处地址: 

接下来关于SpringBoot的一系列文章和例子,都来自《Spring Boot Cookbook》这本书,本文的主要内容是start.spring.io的使用、Spring Boot的自动配置以及CommandRunner的角色和应用场景。

项目地址:

因为需要使用到这方面内容,所有对这一部分进行了翻译。

首先带你浏览 Boot提供的组件,然后会给你展示如何让你的Spring工程变得“Bootiful”,我称之为“Boot化”。

每一个特性都会有一个测试用例用于展示,可以用IDE的Run As > JUnit Test查看效果

29  使用SQL数据源

在网站Spring Initializr上填对应的表单,描述Spring Boot项目的主要信息,例如Project Metadata、Dependency等。在Project Dependencies区域,你可以根据应用程序的功能需要选择相应的starter。

使用测试驱动开发的模式,每一个测试类都会由@RunWith(SpringRunner.class)、@SpringBootTest注解,需要测试Http请求的需要添加@WebAppConfiguration注解

  SpringBoot为SQL数据源提供了广泛支持,从直接使用JdbcTemplate的JDBC访问到完整的ORM(关系映射型)框架(例如Hibernate)。String Data提供了一份经典的功能级别,直接从接口创建存储库实现,并使用约定从方法名生成查询。

Spring Boot starters可以简化Spring项目的库依赖管理,将某一特定功能所需要的依赖库都整合在一起,就形成一个starter,例如:连接数据库、springmvc、spring测试框架等等。简单来说,spring boot使得你的pom文件从此变得很清爽且易于管理。

请看src/test/java/dev/wangyaohui/WebMVCTests.java

29.1  配置数据源

常用的starter以及用处可以列举如下:

过程:

  java的javax.sql.DataSource接口提供了一个经典的方法来使用SQL数据源。一般来说,一个数据源需要一个带有验证的URL来创建一个数据库连接。

  • spring-boot-starter: 这是核心Spring Boot starter,提供了大部分基础功能,其他starter都依赖于它,因此没有必要显式定义它。
  • spring-boot-starter-actuator:主要提供监控、管理和审查应用程序的功能。
  • spring-boot-starter-jdbc:该starter提供对JDBC操作的支持,包括连接数据库、操作数据库,以及管理数据库连接等等。
  • spring-boot-starter-data-jpa:JPA starter提供使用Java Persistence API(例如Hibernate等)的依赖库。
  • spring-boot-starter-data-*:提供对MongoDB、Data-Rest或者Solr的支持。
  • spring-boot-starter-security:提供所有Spring-security的依赖库。
  • spring-boot-starter-test:这个starter包括了spring-test依赖以及其他测试框架,例如JUnit和Mockito等等。
  • spring-boot-starter-web:该starter包括web应用程序的依赖库。
  1. 依赖spring-boot-starter-test
  2. 里面包含测试RestController请求的用例

29.1.1 嵌入式数据库支持

How do

首先我们要通过start.spring.io创建一个图书目录管理程序,它会记录出版图书的记录,包括作者、审阅人、出版社等等。我们将这个项目命名为BookPub,具体的操作步骤如下:

  • 点击“Switch to the full version.”,展示完整页面;
  • Group设置为:org.test;
  • Artifact设置为:bookpub;
  • Name设置为:BookPub;
  • Package Name设置为:org.test.bookpub;
  • Packaging代表打包方式,我们选jar;
  • Spring Boot Version选择最新的1.3.0;
  • 创建Maven工程,当然,对Gradle比较熟悉的同学可以选择Gradle工程。
  • 点击“Generate Project”下载工程包。

利用IDEA导入下载的工程,可以看到pom文件的主体如下如下所示:

 <groupId>com.test</groupId> <artifactId>bookpub</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>BookPub</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>

在Spring Boot项目中,xxxApplication.java会作为应用程序的入口,负责程序启动以及一些基础性的工作。@SpringBootApplication是这个注解是该应用程序入口的标志,然后有熟悉的main函数,通过SpringApplication.run(xxxApplication.class, args)来运行Spring Boot应用。打开SpringBootApplication注解可以发现,它是由其他几个类组合而成的:@Configuration(等同于spring中的xml配置文件,使用Java文件做配置可以检查类型安全)、@EnableAutoConfiguration(自动配置,稍后细讲)、@ComponentScan(组件扫描,大家非常熟悉的,可以自动发现和装配一些Bean)。

我们在pom文件里可以看到,com.h2database这个库起作用的范围是runtime,也就是说,当应用程序启动时,如果Spring Boot在classpath下检测到org.h2.Driver的存在,会自动配置H2数据库连接。现在启动应用程序来观察,以验证我们的想法。打开shell,进入项目文件夹,利用mvn spring-boot:run启动应用程序,如下图所示。

图片 1Spring Boot的自动配置

可以看到类似Building JPA container EntityManagerFactory for persistence unit 'defaultHHH000412: Hibernate Core {4.3.11.Final}HHH000400: Using dialect: org.hibernate.dialect.H2Dialect这些Info信息;由于我们之前选择了jdbc和jpa等starters,Spring Boot将自动创建JPA容器,并使用Hibernate4.3.11,使用H2Dialect管理H2数据库。

我们新建一个StartupRunner类,该类实现CommandLineRunner接口,这个接口只有一个函数:public void run(String... args),最重要的是:这个方法会在应用程序启动后首先被调用

请看src/test/java/dev/wangyaohui/JPATests.java

  使用嵌入内存的数据源来开发一个应用很方便。显然,内存嵌入式数据源并不支持持久存储,因此你必须在应用开始的时候进行数据填充,并在应用停止时有丢失数据的准备。

How do

  • 在src/main/java/org/test/bookpub/下建立StartRunner类,代码如下:
package com.test.bookpub;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.boot.CommandLineRunner;public class StartupRunner implements CommandLineRunner { protected final Logger logger = LoggerFactory.getLogger(StartupRunner.class); @Override public void run(String... strings) throws Exception { logger.info; }}
  • 在BookPubApplication类中创建bean对象,代码如下:
 @Bean public StartupRunner schedulerRunner() { return new StartupRunner(); }

还是用mvn spring-boot:run命令启动程序,可以看到hello的输出。对于那种只需要在应用程序启动时执行一次的任务,非常适合利用Command line runners来完成。Spring Boot应用程序在启动后,会遍历CommandLineRunner接口的实例并运行它们的run方法。也可以利用@Order注解(或者实现Order接口)来规定所有CommandLineRunner实例的运行顺序。

利用command-line runner的这个特性,再配合依赖注入,可以在应用程序启动时后首先引入一些依赖bean,例如data source、rpc服务或者其他模块等等,这些对象的初始化可以放在run方法中。不过,需要注意的是,在run方法中执行初始化动作的时候一旦遇到任何异常,都会使得应用程序停止运行,因此最好利用try/catch语句处理可能遇到的异常。

过程:

  SpringBoot可以自动配置需要嵌入的数据源:H2、HSQL和Derby等。这并不需要你提供链接URL,仅仅只需要添加对应的数据源依赖即可。

  1. 依赖spring-boot-starter-data-jpa
  2. 使用内存数据库H2DB,创建Repository接口后,由Spring创建相应的实例

  注意:如果你在你的测试中使用了嵌入式数据库,为防止你的整个测试套件中的所有应用上下文会共用同一个数据源,需要做以下设置:spring.datasource.generate-unique-name=true

没有特定的tester,只要项目里声明了@Repository,Spring会自动生成Restful风格的Controller

  例如:经典的POM依赖为

过程:

1         <dependency>
2             <groupId>org.springframework.boot</groupId>
3             <artifactId>spring-boot-starter-data-jpa</artifactId>
4         </dependency>
5         <dependency>
6             <groupId>org.hsqldb</groupId>
7             <artifactId>hsqldb</artifactId>
8             <scope>runtime</scope>
9         </dependency>
  1. 依赖spring-boot-starter-data-jpa和spring-boot-starter-data-rest
  2. 使用内存数据库H2DB,创建Repository接口后,由Spring创建相应的实例,继而由Spring创建相应的RestController
  3. 可以使用postman测试,在项目启动后,可以输入localhost:8080/api/persons访问查看效果

  注意:为了实现嵌入式数据源的自动配置,你需要添加Spring-jdbc的依赖,在这个实例中Spring-jdbc的依赖被spring-boot-starter-data-jpa所导入(言外之意,你无须关心这一点,因为已经被自动导入了)。

请看

  注意:如果因为一些原因,你需要为嵌入式数据源配置URL,一定要记得将该数据源的自动shutdown功能关闭。如果你使用的是H2数据源,你需要配置DB_CLOSE_ON_EXIT=FALSE;如果你使用的是HSQLDB数据源,你需要确保shutdown=true失效。禁用嵌入式数据源的自动shutdown功能之后当数据源被关闭时转由SpringBoot来进行控制,这样一来不必再确保数据源只被一次访问。

  1. src/main/java/dev/wangyaohui/aop/CountingAspect.java
  2. src/main/java/dev/wangyaohui/aop/CountingTester.java
  3. src/test/java/dev/wangyaohui/AOPTests.java

29.1.2 连接生产数据库

过程:

  生产的数据库也可以进行自动配置,只需要使用一个数据源池。下面是一些实现方式:

  1. 依赖spring-boot-starter-aop
  2. 测试用例是处理每一个类的添加了@Counting注解的方法,计算每个方法的调用时长

  (1)我们一般热衷于HikariCP ,因为它的高性能和高并发性,一般情况下我们都会选择它。
  (2)另外,如果tomcat的数据源池可用,我们也可以选择使用它。
  (3)如果前两个都不能使用,而DBCP2可用的话,我们选择它。

  如果是添加了spring-boot-starter-jdbc或者是spring-boot-starter-data-jpa依赖starter的话,它们会自动添加对HikariCP的依赖。

  注意:你完全可以忽视其实现算法,而使用spring.datasource.type属性来指定连接池。当你的应用正在使用默认的tomcat-jdbc运行在Tomcat容器时,尤其要注意这一点。

  注意:额外的连接池可以通过手动进行配置,如果你自定义了DataSource的Bean实例,那么自动配置将不会生效。

  数据源的配置由外部属性配置文件:spring.datasource.*来配置。例如:你可以在application.properties文件中申明如下配置:

spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

  注意:你至少要使用spring.datasource.url属性来指定url链接,或者由SpringBoot自动配置一个内嵌数据源(内嵌数据源不需要指定url)

  注意:你一般不需要指定driver-class-name,因为SpringBoot可以从url之中自动识别出大多数数据库的驱动类名。

  注意:要想得到一个数据源池,我们需要确保对应的驱动类是有效的,这项工作需要最先进行验证。例如:如果你设置spring.datasource.driver-class-name=com.mysql.jdbc.Driver的话,那么这个驱动类必须是可被加载的。

  参照DataSourceProperties类可查看更多配置项。不论实际上如何实现,这些都是一些标准的配置项。还可以通过一些带有前缀的指定配置进行微调(例如:spring.datasource.hikari.*、spring.datasource.tomcat.*、spring.datasource.dbcp2.*等)。更多信息请参考你使用的连接池的实现文档。

  例如:如果你使用的是Tomcat连接池,你需要如下额外配置内容:

# Number of ms to wait before throwing an exception if no connection is available.(如果连接无效,等待多久抛出异常)
spring.datasource.tomcat.max-wait=10000

# Maximum number of active connections that can be allocated from this pool at the same time.(连接池中可同时分配的最大连接数量)
spring.datasource.tomcat.max-active=50

# Validate the connection before borrowing it from the pool.(获取池中连接前是否进行连接验证)
spring.datasource.tomcat.test-on-borrow=true

29.1.3 连接一个JNDI数据源

  如果你正在将你的应用部署到一个应用服务器中,你肯能会想要使用JDNI和服务器特性来配置和管理你的数据源。

  spring.datasource.jndi-name属性可被用来替换spring.datasource.url、spring.datasource.username和spring.datasource.password三个属性来达成定位连接一个JNDI数据源的目的。例如:在application.properties文件中进如下配置可以显示如何连接JBoss中定义的数据源。

spring.datasource.jndi-name=java:jboss/datasources/customers

本文由美高梅平台下载发布于美高梅平台下载,转载请注明出处:因为需要使用到这方面内容,starters可以简化Sp

关键词:

这个是基于Redis缓存的Session共享,让我们开始吧

适用场景 为了使Web能适应大规模的访问,需要实现应用程序的集群部署 实现集群部署首先要解决session的统一,即需要...

详细>>

)中介绍的服务的消费者和提供者都需要在注册

spring-boot-start-dubbo,让你可以使用spring-boot的方式开发dubbo程序。使dubbo开发变得如此简单。 一、注册中心Zookeeper的安...

详细>>

特别的是在一些框架中,为其他对象提供一种代

即ProxyPattern,23种常用的面向对象软件的设计模式之一。为其他对象提供一种代理以控制对这个对象的访问。在某些情...

详细>>

定义抽象命令和多个具体的命令,首先定义命令

命令模式,将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化;对请求队列或记录请求日志,...

详细>>