您的位置:首页 > 编程语言 > Java开发

Spring boot入门实例 简易登录(精通Spring+4.x++企业应用开发实战 学习笔记二)

2017-09-03 15:38 1031 查看


本例中的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"> <!-- 继承Spring Boot默认配置-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>chapter3</artifactId>
<name>Spring4.x第三章实例</name>
<packaging>war</packaging>
<!--根据应用需要添加不同类型的启动器依赖 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 导入spring-boot-starter-jdbc依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--添加 spring-boot-starter-actuator依赖,可添加监控功能-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 导入访问数据库的JDBC驱动器-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- 添加tomcat-embed-jasper依赖-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!--添加jstl模块依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</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>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
</plugins>
</build>
</project>


快速入门

在pom.xml文件中引入Spring Boot依赖

<?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"> <parent>
<groupId>org.springframework.boot</
134d1
groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>chapter3</artifactId>
<name>Spring4.x第三章实例</name>
<packaging>war</packaging>
<dependencies>
<!-- 添加一个Boot Web启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.6.RELEASE</version>
</dependency>
</dependencies>
</project>


在dependency中引用了一个spring-boot-starter-web启动器依赖

创建一个Web应用

package com.smart.web;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableAutoConfiguration //由Boot提供的,用于对Spring框架进行自动配置,减少了工作量
public class BbsDaemon {
@RequestMapping("/")
public String index(){
return "欢迎光临论坛";
}

public static void main(String[] args) throws Exception{
SpringApplication.run(BbsDaemon.class,args);
}
}


@EnableAutoConfiguration注解是由Boot提供的,用于对Spring框架进行自动配置,减少了工作量

@RestController和 @RequestMapping注解是由Spring MVC提供的,用于创建Rest服务。

直接运行BbsDaemon会启动一个运行与8080端口(默认)的内嵌Tomcat服务,访问”http://localhost:8080/“,即可看到



既没有配置安装Tomcat或Jetty这样的应用服务器,也没有打包成WAR文件,Spring Boot简直太方便了。

为了编写代码的可读性,建议采用下图的包组织方式



Application应用主类应该放在com.smart主包下

package com.smart;
import org.springframework.boot.SpringApplication;

//@Configuration
//@ComponentScan
//@EnableAutoConfiguration
@SpringBootApplication
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}


这个主类声明了main()方法,并再类级别上标准了SpringBootApplication注解(代替了那三个注释的注解)

Spring Boot启动只需在main()方法中通过SpringApplication.run()方法启动即可。

安装配置

建议使用Maven或Gradle构建系统来使用Spring Boot

基于Maven环境配置

为了更容易地管理依赖版本和使用默认配置,Spring Boot提供了一个pom根配置,在项目工程中可以直接继承它。

<?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"> <!-- ①继承Spring Boot默认配置-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>chapter3</artifactId>
<name>Spring4.x第三章实例</name>
<packaging>war</packaging>
<!--②根据应用需要添加不同类型的启动器依赖 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!--③配置运行插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>


在①出继承了Spring Boot提供的根默认配置依赖,并且指定当前版本号为1.3.3.RELEASE

这里引入spring-boot-starter-parent的好处是在②处添加启动器时不必再声明版本号

如果不想采用继承方式,也可以使用如下方式导入Boot提供的根配置

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.3.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>


在③处引用了一个Spring Boot运行插件,可以在右边额Maven Projects中看到Spring Boot运行命令。

在默认情况下,Spring Boot会采用内嵌的Tomcat运行当前应用,如果想使用Jetty运行当前应用,只需在依赖中添加一个Jetty启动器(spring-boot-starter-jetty)

持久层

Spring框架提供了几种可选的操作数据库方式,可以直接使用Spring内置轻量级的JdbcTemplate,也可以使用第三方持久化框架Hibernate或MyBaits。

Spring Boot为这两种操作数据库方式分别提供了相应的启动器spring-boot-starter-jdbc和spring-boot-starter-jpa。

要使用Spring Boot提供的JDBC启动器,首先在模块pom.xml中导入spring-boot-starter-jdbc依赖及访问数据库的JDBC驱动器

...
<!-- 导入spring-boot-starter-jdbc依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--导入访问数据库的JDBC驱动器 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
...


导入依赖包之后,为了让Spring Boot能自动装配数据源的连接,需要在根目录resources下创建一个application.properties,配置数据库的连接信息

# Available levels are: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
logging.level.com.smart = DEBUG
logging.level.org.springframework.web = DEBUG
#logging.file = /var/netgloo_blog/logs/spring-boot-logging.log

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

#server.contextPath=/
#server.port=8080

# ①-2 指定自定义连接池
#spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource

#①-1 配置数据库连接信息
spring.datasource.name=sampleDs
spring.datasource.url=jdbc:mysql://localhost:3306/sampledb
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# ②配置JNDI数据源
#spring.datasource.jndi-name=java:comp/env/jdbc/sampleDs

#①-3 连接池配置信息
spring.datasource.max-wait=10000
spring.datasource.max-active=50
spring.datasource.max-idle=10
spring.datasource.min-idle=8
spring.datasource.test-on-borrow=true
spring.datasource.validation-query=select 1

#③ 初始化数据库脚本
#spring.datasource.initialize=true
#spring.datasource.platform=mysql
#spring.datasource.data=data
#spring.datasource.schema=schema


在Spring Boot中,可以通过两种方式配置数据库连接:

①通过自定义连接的方式,如①-1,通过配置spring.datasource.*选项设定数据源的链接地址,连接驱动器,用户名以及密码。默认情况下,Boot启动器自动创建tomcat-jdbc连接池。如果不使用默认的连接池,可以通过spring.datasource.type属性手工指定项目所需的连接池(如DBCP,C3P0).

②通过JNDI(Java Naming and Directory Interface,Java命名和目录接口)方式设置,在生产环境中通常采用这种方式。如在②为spring.datasource.jndi-name属性指定一个JNDI连接名称即可。

在Boot中提供了灵活的数据库初始化方式,可以设定DDL(Data Definition Language 数据定义语言)脚本,也可以设定DML(data manipulation language,数据操纵语言)脚本。

如③处,spring.datasource.initialize属性设置启动的时候是否进行初始化;spring.datasource.platform设置当前数据库类型;spring.datasource.data=data设置DML脚本文件名称,在启动的时候会从类根路径加载data-${platform}.sql文件执行,其中${platform}为当前数据库类型,本示例配置会加载data-mysql.sql;spring.datasource.schema设置DDL脚本文件的名称,在启动的时候会从类根路径加载schema-mysql.sql文件执行。

UserDao和LoginLogDao

与第二章中的UserDao和LoginLogDao一样,domain中的User和LoginLog也是

第二章

看起来和没使用Spring Boot一样,但是Spring Boot会自动在Spring容器中装配DAO,而没用Spring Boot时候我们需要手动建立一个.xml的Spring配置文件来装配DAO

业务层

UserService负责将持久层的UserDao和LoginDao组织起来,完成用户/密码认证,登录日志记录等操作

与第二章一样

在编写业务层代码时有两个重要的步骤:一是编写正确的业务逻辑;二是对业务事务的管控。

在Spring Boot中,使用任务非常简单,首先在主类Application上标@EnableTransactionManagement注解(开启事务支持,相当于XML中的<tx:annotation-driven/>配置方法),然后在访问Service方法上标注@Transactional注解即可(在UserService的loginSuccess()方法上)。

如果将@Transactional注解标注在Service类级别上,那么当前Service类的所有方法都将被事务增强,建议不要在类级别上标注@Transactional。

package com.smart;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.WebApplicationInitializer;
import javax.sql.DataSource;

@SpringBootApplication
@EnableTransactionManagement //启用注解事务管理
public class Application  extends SpringBootServletInitializer implements WebApplicationInitializer {

@Bean
public PlatformTransactionManager txManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}

protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}

public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}


通过@EnableTransactionManagement注解,Boot为应用自动装配了事务支持。这对用户并不透明,如果用户想自己定义事务管理器,则在Application类添加一个PlatformTransactionManager即可,如上的自定义事务管理器方法txManager(),并在方法上标注@Bean注解,此时Spring Boot会加载自定义的事务管理器,不会重新实例化其他事务管理器。

如果在实际的项目中需要分布式事务支持,Boot也提供了很好的支持,它继承了Atomikos和Bitronix分布式事务处理框架,可以根据需要导入相应的启动器(spring-boot-starter-jta-atomikos或spring-boot-starter-jta-bitronix)

展现层

在示例中使用JSP作为视图,且用到了JSTL标签,因此需要在添加相关的依赖包

配置pom.xml依赖

<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>


为了支持JSP和JSTL,我们添加了tomcat-embed-jasper和jstl两个模板依赖,并将模板的打包方式改为WAR

配置Spring MVC框架

在Boot中配置MVC很简单,只要将启动类Application继承Spring Boot提供的Servlet初始化器SpringBootServletInitializer和重写SpringBootServletInitializer提供的configure()方法

处理登录请求

编写LoginController,它负责处理登录请求,完成登录业务,并根据登录成功与否转向欢迎页面或失败页面,这与第二章一致

在@RequestMapping注解中,可以配置多个映射路径,如

@RequestMapping(value={“/”,”/index.html”})

接下来配置MVC视图映射,首先创建一个文件夹存放JSP,统一规范在src/main/webapp/WEN-INF目录下创建一个jsp文件夹,并将第二章的两个jsp放在里面

在默认情况下,Spring Boot对/static,/public,/resources或/META-INF/resources目录下的静态文件提供支持,我们可以将应用中的静态文件(JS,CSS,Image等)放到这几个目录中

规划好视图目录后,最后一步就是在application.properties中配置创建好的视图的路径

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp


最后,通过Spring Boot运行应用插件,双击spring-boot:run命令:

在浏览器中输入”http://localhost:8080/index.html“,可以跳到登录页面

也可输入,但

@RequestMapping(value={"/","/index.html"}) //可以配置多个映射路径
public String loginPage(){
return "login";
}


中记得配置多个映射路径

在基于Spring Boot的应用在开发调试的时候,一定要基于Spring Boot提供的spring-boot-maven-plugin插件命令来运行应用或通过Spring Boot命令行来运行应用,而不要右键鼠标运行当前类,在访问有视图的JSP的页面时(如JSP),会一直报404错误

运维支持

当应用部署到生产环境时,需要各种运维相关的功能的支持,如监控应用的各种性能指标,运行信息和应用状态等。

Spring Boot对这些运维监控相关的类库进行了整合,形成了一个功能完备和可定制的启动器,称为Actuator

基于Spring Boot应用,添加监控功能只需在应用的pom.xml文件中添加

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>


Spring Boot默认提供了对应用本身,关系数据库连接,MongoDB,Redis,Solr,ElasticSearch,JMS和Rabbit MQ等服务的健康状态的检查功能。

这些服务都可以在application.properties的management.health.*选项中进行配置

#数据库监控配置
management.health.db.enabled=true
management.health.defaults.enabled=true

#应用磁盘空间检查配置
#management.health.diskspace.enabled=true
#management.health.diskspace.path=F:\programmer software
#management.health.diskspace.threshold=0

#ElasticSearch服务健康检查配置
management.health.elasticsearch.enabled=true
management.health.elasticsearch.indices=index1,index2
management.health.elasticsearch.response-timeout=100

#Solr服务健康检查配置
management.health.solr.enabled=true

#JMS服务健康检查配置
management.health.jms.enabled=true

#Mail服务健康检查配置
management.health.mail.enabled=true

#MongDB服务健康检查配置
management.health.mongo.enabled=true

#Rabbit MQ服务健康检查配置
management.health.rabbit.enabled=true

#Redis服务健康检查配置
management.health.redis.enabled=true
management.health.status.order=DOWN,OUT_OF_SERVICE,UNKNOWN,UP




下面Spring Boot默认提供的健康检查关键服务

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring
相关文章推荐