当前位置: 澳门新濠3559 > 编程 > 正文

服务也可以满足快速构建的需要,加完依赖之后

时间:2019-10-06 23:53来源:编程
big技术选型/big 参考:http://keeganlee.me/post/practice/20161006 语言 : Java (Node / Java) IDE : IntelliJ IDEA (IntelliJ IDEA / Eclipse / NetBeans) Web框架 : Spring Boot (Spring MVC / Spring Boot / JSF /Struts / ..) 构建工具

澳门新濠3559 1

  1. <big>技术选型</big>
    参考:http://keeganlee.me/post/practice/20161006

    • 语言 : Java (Node / Java)
    • IDE : IntelliJ IDEA (IntelliJ IDEA / Eclipse / NetBeans)
    • Web框架 : Spring Boot (Spring MVC / Spring Boot / JSF / Struts / ..)
    • 构建工具 : Gradle (Maven / Gradle / Ant)
    • 数据库 : MySQL [配合Workbench食用]
    • 服务器 : Tomcat
  2. <big>项目构建</big>

    • IDEA->新建项目-> Spring Initializr -> Gradle Project -> Spring依赖库Web&MySQL
    • 配置 application.properties
      在 application.properties 中添加如下内容:

澳门新濠3559 2image.png

澳门新濠3559 3

Java Web 核心逻辑操作数据库,数据库默认优先选择 MySQL 。

  1. Spring Boot 简介 151.1. 从 Spring 到Spring Boot 161.1.1. 从 EJB 到 Spring 161.1.2. Spring 框架发展简史 191.1.3. Spring 框架的核心模块 211.1.4. Spring 新生态 281.2. Spring Boot 是什么 291.3. Spring Boot 框架组成 301.3.1. spring-boot 311.3.2. spring-boot-starters 311.3.3. spring-boot-autoconfigure 311.3.4. spring-boot-actuator 321.3.5. spring-boot-tools 321.3.6. spring-boot-cli 321.4. Spring Boot 极简特性 321.5. 约定优于配置极简化理念 341.6. Spring 5.0 新特性 361.7. Spring Boot 2.0 新特性 361.8. Spring Cloud 简介 361.9. 最新IntelliJ IDEA 2017.3版本特性 361.10. 本章小结 36
  2. 快速开始 HelloWorld 362.1. 创建 Spring Boot 项目 362.2. Spring Boot 项目的入口类 422.3. 添加 HelloWorldController 442.4. Spring Boot应用级注解 @SpringBootApplication 472.4.1. Spring Boot配置类注解 @SpringBootConfiguration 482.4.2. XML 配置文件 VS. JavaConfig 注解配置 492.4.3. 启用自动配置注解 @EnableAutoConfiguration 502.4.4. 组件扫描注解 @ComponentScan 512.4.5. 导入配置类注解 @Import 522.5. 本章小结 52
  3. 深入理解Spring Boot 自动配置 533.1. 传统 SSM 开发回顾 533.1.1. 创建 Maven 工程 533.1.2. 添加源代码和资源目录 583.1.3. 引入项目依赖的JAR包 603.1.4. 配置 Spring 上下文spring.xml 633.1.5. 配置 SpringMVC 的上下文spring-mvc.xml 663.1.6. DispatcherServlet在web.xml中的配置 683.1.7. 完整的 web.xml 配置 683.1.8. mybatis-generator配置 733.1.9. 数据库表结构 743.1.10. MapperScanner和SqlSessionFactoryBean配置 753.1.11. Service 层和 Controller 层代码 803.1.12. 配置 Tomcat 服务器 843.1.13. 视图模板层代码 873.2. Spring 简化 XML 配置的解决方案 913.3. 自动配置的 Spring Boot 933.3.1. 条件注解 @Conditional 933.3.2. @Conditional注解使用实例 933.3.3. 常见条件注解 1053.3.4. 组合注解 1063.4. Spring Boot Starters 1063.5. @EnableAutoConfiguration自动配置原理 1083.5.1. 自动配置过程 1083.5.2. spring.factories文件 1103.5.3. getCandidateConfigurations 方法 1173.6. FreeMarkerAutoConfiguration自动配置实例分析 1183.6.1. spring-boot-starter-freemarker工程 1183.6.2. spring-boot-autoconfigure工程 1203.7. Spring Boot Autoconfigure 工作原理图 1253.8. 本章小结 126
  4. Spring Boot 命令行 CLI 1274.1. 安装 CLI 1274.2. 快速开始Hello World 1284.3. spring命令 1314.4. 使用@Grab注解下载依赖 1334.5. beans Groovy DSL 1344.6. 创建项目命令 spring init 1354.7. 本章小结 138
  5. Spring Boot 集成 MyBatis数据库层开发 1385.1. Java EE 的分层模型 1395.1.1. 模型层 1415.1.2. 数据访问对象层 1415.1.3. 业务逻辑层 1415.1.4. 控制器层 1415.1.5. 视图层 1415.2. MyBatis 简介 1415.2.1. 概述 1425.2.2. MyBatis 框架组成 1435.2.3. 接口层 1435.2.4. 数据处理层 1475.2.5. 基础设施层 1525.3. 项目实战 1645.3.1. 使用 Spring Boot CLI 创建工程 1645.3.2. 配置application.properties 1765.3.3. 使用IDEA 中自带的连接数据库客户端 1775.3.4. 使用 MyBatis Generator 生成 Dao 层代码 1785.3.5. 配置MyBatis同时使用 Mapper.xml和注解 1835.3.6. 使用 MyBatis分页 插件pagehelper 1865.3.7. 实现查询接口 1865.3.8. 使用@Select注解 1875.3.9. Mybatis插件机制 1905.3.10. 实现分页接口 1925.3.11. PageHelper工作原理 1975.3.12. 多表关联查询级联 2065.4. 本章小结 211
  6. Spring Boot 集成 JPA数据库层开发 2126.1. JPA是什么 2126.1.1. JPA 简介 2126.1.2. JPA 整体架构 2126.1.3. JPA 生态 2146.1.4. JPA 技术栈 2176.1.5. ORM 框架概述 2176.2. Hibernate 简介 2196.2.1. Hibernate 模块组成 2196.2.2. Hibernate整体架构 2196.2.3. Hibernate 特性 2266.2.4. Hibernate 与 MyBatis 简单对比 2286.3. Spring Data JPA简介 2286.3.1. Spring Data 项目 2296.3.2. Spring Data JPA概述 2326.4. 项目实战 2326.4.1. Spring Data JPA提供的接口 2326.4.2. 创建项目 2336.4.3. 工程导入 IDEA 2356.4.4. 配置数据库 2376.4.5. 自动生成 Entity 实体类代码 2386.4.6. 配置项目数据源信息 2486.4.7. 实现查询接口 2486.4.8. 分页查询 2536.4.9. 多表级联查询 2566.4.10. 级联类型CascadeType 2596.4.11. 模糊搜索接口 2616.4.12. JPQL语法基础 2636.4.13. JPA常用注解 2696.5. 本章小结 271
  7. 服务也可以满足快速构建的需要,加完依赖之后的 dependencies 如下。开发 Spring Boot Gradle插件实现自动化生成代码脚手架 2717.1. Gradle 简介 2727.1.1. Gradle 概述 2727.1.2. Gradle 特性 2737.1.3. Gradle 构建生命周期 2737.1.4. Gradle 仓库 2747.1.5. 约定优于配置 2757.1.6. 发布 Gradle 项目生成的构件 2757.1.7. Groovy 特点简介 2767.2. Gradle 插件 2767.2.1. Gradle 插件概述 2777.2.2. 常用 Gradle插件 2777.2.3. java 插件 2777.2.4. application 插件 2807.3. 项目实战 2817.3.1. 创建项目 2817.3.2. 添加依赖 2877.3.3. 配置上传本地Maven仓库 2877.3.4. 实现 Plugin 2887.3.5. 添加插件属性配置 2967.3.6. 运行测试 2977.3.7. 在项目中使用kor插件 3007.4. 本章小结 304
  8. Spring Boot 使用 Spring MVC 和FreeMarker开发 Web 应用 3058.1. Spring MVC 简介 3058.1.1. Servlet 概述 3058.1.2. MVC 简介 3108.1.3. Spring、Spring MVC 与 Spring Boot 2.0 3128.1.4. Spring MVC 框架 3138.2. Spring MVC 常用注解 3178.3. 使用FreeMarker模板引擎 3198.3.1. FreeMarker简介 3198.3.2. 实现一个分页查询页面 3208.4. 本章小结 330
  9. Spring Boot 自定义 SpringMVC配置 3319.1. 配置父类WebMvcConfigurationSupport 3319.2. 静态资源处理配置类ResourceHandler 3349.3. 拦截器配置类HandlerInterceptor 3359.4. 跨域支持配置类CorsRegistry 3379.5. 添加视图控制器ViewController 3389.6. 消息转换器MessageConverter 3389.7. 数据格式化器 Formatter 3409.8. 视图解析器ViewResolver配置 3409.9. 全局异常处理ExceptionHandler 3419.9.1. 使用 @ControllerAdvice @ExceptionHandler实现统一异常处理 3429.9.2. 实现 HandlerExceptionResolver 接口 3449.10. 定制与优化内置Tomcat容器 3479.11. 定制 Spring Boot 应用程序启动 Banner 3519.12. 本章小结 356
  10. Spring Boot注册 Servlet、Filter 和 Listener 35610.1. 创建项目 35610.2. 注册 Servlet 35810.3. 注册 Filter 36210.4. 注册 Listener 36910.5. 本章小结 370
  11. Spring Boot AOP 面向切面编程 37111.1. AOP 简介 37111.2. AOP 核心概念 37211.3. Spring AOP介绍 37411.4. 项目实战:实现日志切面 37511.4.1. 创建项目 37511.4.2. 添加 aop 依赖aspectjweaver 38211.4.3. 切面逻辑实现 38411.4.4. @Pointcut匹配表达式 38511.4.5. 运行测试 38611.5. 本章小结 387
  12. Spring Boot 使用 AOP Filter实现用户登录鉴权与权限控制 38712.1. 系统整体架构 38712.2. 创建工程 38912.3. 数据库表结构设计 39412.4. 用户登录逻辑 39512.5. 登录态鉴权过滤器 40112.5.1. 用户鉴权逻辑 40112.5.2. 运行测试 40412.5.3. 页面展示用户名 40612.6. AOP实现用户权限管理 40712.6.1. 功能简介 40712.6.2. 实现权限控制 40712.6.3. 无权限页面 41012.6.4. Pointcut切入点配置 41012.6.5. 运行测试 41112.7. 用户注册 41212.7.1. 用户注册界面 41212.7.2. 模板代码 41212.7.3. 前端js代码 41312.7.4. 后端注册接口 41312.7.5. 数据后端校验 41412.7.6. 获取数据校验结果 41812.7.7. 运行测试 41912.8. 本章小结 424
  13. Spring Boot 使用 Security 实现系统的安全认证与权限控制 42413.1. Spring Security 简介 42513.1.1. Spring Security概述 42513.1.2. 基于Form表单登陆认证 42613.2. Spring Security 核心组件 42713.2.1. SecurityContextHolder与Security Context 42713.2.2. 获取当前用户的信息 42813.2.3. 认证信息类Authentication 42913.2.4. 认证管理器AuthenticationManager 43013.2.5. 基于数据库的认证DaoAuthenticationProvider 43213.2.6. UserDetails与UserDetailsService 43313.3. 项目实战 43513.3.1. 初阶 Security: 默认认证用户名密码 43513.3.2. 中阶 Security:内存用户名密码认证 44113.3.3. 角色权限控制 44513.3.4. 进阶 Security: 基于数据库的用户和角色权限 45313.4. 本章小结 477
  14. React.js Spring Boot 开发前后端分离项目 47714.1. 前后端分离架构 47814.1.1. 前端简史 47814.1.2. ECMAScript的历史 47814.1.3. 从后端走向前端 47914.1.4. 前后端分离架构 48014.2. 项目实战 48114.2.1. 系统功能介绍 48214.2.2. 实现登陆后端接口 48314.2.3. 实现登陆前端页面 48614.2.4. 用户登录状态接口 48814.2.5. 实现列表展示后端接口 49014.2.6. 实现列表展示前端页面 49114.2.7. 前后端集成配置 49214.2.8. 前后端联调测试 49214.3. 本章小结 495
  15. Spring Boot 定时任务 49615.1. 定时任务概述 49615.2. 静态定时任务 49615.3. Cron 表达式 49815.3.1. Cron简介 49815.3.2. Cron 表达式字段范围 49915.3.3. Cron 表达式特殊字符 49915.3.4. 常用的 Cron 表达式 50015.4. 动态定时任务 50115.4.1. 实现SchedulingConfigurer接口 50115.4.2. 从数据库中读取 cron 表达式值 50215.4.3. 数据库初始化数据 50215.4.4. 多线程执行 50315.4.5. 添加多个任务 50415.5. 本章小结 505
  16. Spring Boot 集成 Web Flux 开发 Reactive Web 应用 50616.1. 响应式宣言 50616.2. Spring 5 响应式Web框架架构图 50616.3. 项目实战 50816.3.1. 创建项目 50816.3.2. 项目结构 51116.3.3. 领域实体层 51316.3.4. 服务层 51416.3.5. 控制器路由层 51516.3.6. Reactive Web服务器配置 51616.3.7. 项目启动入口类 51716.3.8. 启动运行 51716.3.9. 测试输出 51816.4. 本章小结 519
  17. Spring Boot 应用监控:Actuator与 Admin 51917.1. Actuator简介 51917.2. 启用 Actuator 52017.3. 揭秘Endpoint端点 52217.3.1. /actuator获取actuator 列表 52217.3.2. /beans获取 Bean 装配信息 52417.3.3. /conditions获取自动配置条件信息 52617.3.4. /configprops获取配置属性信息 52717.3.5. /env系统运行环境信息 52917.3.6. /info 应用基本信息 53217.3.7. /health 获取应用健康信息 53217.3.8. /loggers系统日志信息 53317.3.9. /threaddump系统线程转储信息 53417.3.10. /metrics系统度量指标列表 53617.3.11. /scheduledtasks系统定时任务信息 53717.3.12. /trace系统请求跟踪 53817.3.13. /mappings系统请求 URL 映射信息 53917.3.14. 启用和禁用端点 54117.4. 自定义Actuator Endpoint 54317.4.1. Endpoint接口简介 54317.4.2. 实现Endpoint接口 54717.4.3. 继承AbstractEndpoint抽象类 54917.4.4. 实现健康指标接口HealthIndicator 55417.4.5. 实现度量指标接口PublicMetrics 55517.4.6. SystemPublicMetrics成员方法简介 55617.4.7. 使用 AOP 实现CounterService、GaugeService接口统计方法执行数据 55917.5. 使用Spring Boot Admin可视化 Actuator 监控数据 56417.5.1. Spring Boot Admin简介 56417.5.2. 工作原理简介 56817.5.3. 创建Spring Boot Admin Server 项目 56917.5.4. 在 Client 端的 Spring Boot项目中配置使用Admin Server 57117.6. 本章小结 579
  18. Spring Boot 应用的测试 58018.1. 项目准备工作 58018.1.1. 创建项目 58018.1.2. 导入项目到 IDEA 58118.1.3. 设计项目目录结构 58118.2. 项目配置 58218.2.1. Gradle构建配置文件 58218.2.2. 项目属性文件配置 58418.3. 项目代码开发 58418.3.1. Entity 层代码 58418.3.2. Dao 层代码 58518.3.3. Service 层代码 58518.3.4. Controller 层代码 58618.4. 项目分层测试 58618.4.1. 测试代码目录结构 58718.4.2. Dao 层测试 58818.4.3. Service 层测试 58918.4.4. 使用 Mockito 测试 Service 层代码 59018.4.5. Controller 层测试 59218.4.6. JSON接口数据的测试断言 59618.5. 本章小结 600
  19. 使用 Docker 构建部署运行 Spring Boot 应用 60019.1. 创建测试项目 60019.2. 项目打包成可执行 jar 60319.3. 定制配置文件启动应用 60619.4. 项目打包成 war 包 60819.5. 生产运维 61019.5.1. 查看JVM参数的值 61019.5.2. 应用重启 61119.6. 使用 Docker 构建部署运行Spring Boot应用 61119.6.1. Docker 简介 61119.6.2. 环境搭建 61319.7. Spring Boot 项目 Docker化实战 61719.7.1. 添加 docker 构建插件 61819.7.2. 配置 Dockerfile 文件创建自定义的镜像 61819.7.3. Dockerfile配置说明 62019.7.4. 构建自定义的应用 Docker镜像 62319.7.5. 启动 Docker 应用镜像运行 62319.7.6. 端口映射 62419.7.7. 运行测试 62619.8. 本章小结 627
  20. 附录 I : Spring 5.0 新特性 628
  21. 附录 II : Spring Boot 2.0 新特性 64121.1.1. Kotlin 特性支持 64121.1.2. Spring Boot 2.0.0 M1 Release Notes 64221.1.3. Spring Boot 2.0.0 M2 Release Notes 64821.1.4. Spring Boot 2.0.0 M3 Release Notes 65121.1.5. Spring Boot 2.0.0 M4 Release Notes 65221.1.6. Spring Boot 2.0.0 M5 Release Notes 65521.1.7. Spring Boot 2.0.0 M6 Release Notes 65721.1.8. Spring Boot 2.0.0 M7 Release Notes 660
  22. 附录 III: Spring Cloud 简介 664
  23. 附录 IV:最新IntelliJ IDEA 2017.3版本特性 666
  24. 附录 V:Spring Boot CLI 的 spring init 命令行支持项 667

前言

"4S"框架是我为了区别传统的SSH和SSM说法,提出的一个叫法。自从有了Spring MVC,特别是Spring Boot后,Java服务已经从臃肿的配置中解放出来。Java 服务也可以满足快速构建的需要,迭代速度上并不比PHP,NodeJS差什么。但是很多公司的Java技术栈过于陈旧,无法发挥Java的现有优势。本文主要阐述如何快速优雅的构建一个完整的Java工程。本文提供4S框架的工程化方案

** 内容包括:**

  • 工程构建
  • 包结构设计
  • 工程配置
  • 业务配置
  • ORM层实现

** 本文意图:**

  • 提高企业开发的效率
  • 优化项目结构
  • "4S"是个单体服务,但是可以为"5S"( Spring Cloud)构建微服务提供基础

SpringBoot 项目中 Java 代码操作数据库提供了常用的 2 种框架,JPA「Java Persistence API」与 MyBatis, JPA 是 Spring 家族框架中一种,简洁易用。相对而言,MyBatis 互联网公司使用较多。最为入门优先学习下 JPA 。

    spring.datasource.url=jdbc:mysql://localhost:3306/coderx
    spring.datasource.username=root
    spring.datasource.password=password4root
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver

— 基于 Kotlin Gradle Spring Boot 2.0 的企业级服务端开发实战

1.0 从SSH和SSM到"4S"

澳门新濠3559 4

  • 澳门新濠3559 ,SSH:Structs(控制层),hibernate(ORM),Spring
  • SSM:SpringMVC(控制层),MyBatis(ORM),Spring

以上就是Java服务中最常见的框架思路。这3个最常见的框架之间涉及到框架的整合,而且框架本身的使用也涉及到大量的配置,如MyBatis的Mapping文件。如果能去掉这些框架整合的部分,当然不光是这三个框架的整合,实际业务还包括缓存,消息中间件等大量框架的整合,会十分的美好。如果再优化下ORM映射的过程,会更加的美好。于是有了"4S"。

澳门新濠3559 5

  • "4S":SpringMVC(控制层),Spring Data JPA(ORM),Spring Boot(自动化配置),Spring
2.1 项目构建Gradle与Maven构建,选择一种构建即可;

Gradle 构建添加依赖:

dependencies { compile("org.springframework.boot:spring-boot-starter-web") // JPA Data (We are going to use Repositories, Entities, Hibernate, etc...) compile 'org.springframework.boot:spring-boot-starter-data-jpa' // Use MySQL Connector-J compile 'mysql:mysql-connector-java' testCompile('org.springframework.boot:spring-boot-starter-test')}

Maven 构建添加依赖:

 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- JPA Data (We are going to use Repositories, Entities, Hibernate, etc...) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- Use MySQL Connector-J --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>

数据库操作 GUI 界面软件: navicat 「推荐,All 平台」 与 SQLyog

使用 Navicat 软件创建 db_example 数据库;

4.1 application.properties 文件添加如下配置:

spring.jpa.hibernate.ddl-auto=create //the first one,after must update update configspring.datasource.url=jdbc:mysql://localhost:3306/db_examplespring.datasource.username=root //MySQL userNamespring.datasource.password=password //MySQL password

4.2 Create the @Entity model

@Entity // This tells Hibernate to make a table out of this classpublic class User { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Integer id; private String name; private String email; ....ignore ... getMethod and setMethod }

4.3 Create the repository

import hello.User;// This will be AUTO IMPLEMENTED by Spring into a Bean called userRepository// CRUD refers Create, Read, Update, Deletepublic interface UserRepository extends CrudRepository<User, Long> {}

4.4 Create a new controller for your Spring application

@RestControllerpublic class MainController { private final Logger logger = LoggerFactory.getLogger(getClass; @Autowired // This means to get the bean called userRepository //Which is auto-generated by Spring, we will use it to handle the data private UserRepository userRepository; @GetMapping(value = "/add") public String addNewUser(@RequestParam String name, @RequestParam String email){ System.out.println(name email); User user = new User(); user.setName; user.setEmail; userRepository.save; logger.error("addNewUser name = " name   "; email = " email); return "Save"; } @GetMapping(value = "/all") public Iterable<User> getAllUser(){ return userRepository.findAll(); }}

备注::测试工具推荐,Postman

其中,coderx 是我已在本地建立的本项目的数据库。username 设置为 root 用户,而 password 就是 root 用户的密码了。
设置好数据源之后,为了操作方便,还需要再引入持久层框架。Spring也有提供了JDBC,需要引入jdbc的依赖包,主要就是通过JdbcTemplate建立与数据库的连接。不过,更主流的方案是引入MyBatis,我也倾向于使用MyBatis。

2.0 "4S"工程创建

推荐IntelliJ IDEA构建Spring Boot项目。动手点一点,三步搞定一个Spring Boot的Maven工程,就问你简单不简单?

澳门新濠3559 6

第一步

澳门新濠3559 7

第二步

澳门新濠3559 8

第三步

搞定后,找到包的根目录下的Application文件,运行main函数,一个Java服务就启动了,连Tomcat都不用配置。

引入MyBatis也很简单,打开项目的 build.gradle 文件,在 dependencies 添加 mybatis-spring-boot-starter 依赖,加完依赖之后的 dependencies 如下:

3.0 工程包结构设计

澳门新濠3559 9

提供一种基于4S框架的分包思路,供参考。

  • 1是工程相关的配置信息。
  • 2是数据库相关的业务信息。bean中维护了与数据库表结构对应的信息。repository代替传统的dao层,维护数据库的操作。
  • 3是全局的业务相关的配置信息。包括全局的异常处理,拦截器,工具类,全局缓存。
  • 4是业务的主体。这里只分为2层,controller中是控制层,service中是业务处理主体。
  • 5和/resource/value目录对应。用配置的方式来维护一些常量,类似于之前的constance的作用。
  • 6是程序的入口,因为Spring Boot的配置信息会自动扫描和该文件同级的目录及其子目录的信息,故放在根目录下。
  • 7是前端框架
  • 8是前端页面
  • 9是工程的配置文件
   dependencies {
       compile('org.springframework.boot:spring-boot-starter-web')
       runtime('mysql:mysql-connector-java')
       testCompile('org.springframework.boot:spring-boot-starter-test')
       compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.1.1")
   }

澳门新濠3559 10

4.0 工程配置

4.1 不同环境配置

开发环境和测试环境连接的数据库和一些配置信息不同,可以通过在application.properties指定不同的配置文件

# 配置环境 正式环境release 开发环境debug
spring.profiles.active=debug

然后在application-debug.properties中配置测试环境信息,在application-release.properties中配置正式环境信息。

4.2 日志配置

日志配置很简单,在application.properties做点配置即可,列举几条常用的

# 日志地址
logging.file=D:/springBoot/log.log
# 日志打印级别
logging.level.org.springframework.web=DEBUG

4.3 常量

/value/JavaBean 和 /resource/value/xxx.properties 建立一一对应的关系。可以通过Bean对象获取xxx.properties中的常量信息。举个例子。

/resource/value/user.properties

user.name=wolearn
user.age=12

/java/包名/value/UserProperty.java

@Component
@ConfigurationProperties(prefix = "user", ignoreUnknownFields = false)
@PropertySource("classpath:/value/user.properties")
public class UserProperty {
    private String name;
    private Long age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Long getAge() {
        return age;
    }

    public void setAge(Long age) {
        this.age = age;
    }
}

对应的配置文件和JavaBean建立完毕后,可以直接通过注解注入,直接获取常量的值。

@Resource
private UserProperty userProperty;

public static void main(String[] args) {
    System.out.print("name: "   userProperty.getName()   " age: "   userProperty.getAge();")
}

5.0 业务配置

5.1 全局异常处理

可以使用AOP或者@ControllerAdvice注解来做全局控制。这里使用注解的形式做全局的异常处理。发生异常时,跳转到error.html页面。

/java/包名/global/advice

@org.springframework.web.bind.annotation.ControllerAdvice
public class ControllerAdvice {

    /**
     * 统一处理异常
     * @param exception
     * @param webRequest
     * @return
     */
    @ExceptionHandler(Exception.class)
    public ModelAndView exception(Exception exception, WebRequest webRequest) {
        return new ModelAndView("error");
    }

}

5.2 简单视图映射

有些简单的请求,直接返回视图的,不用直接新建一个完整的controller,可以通过配置直接路由。

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter{
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        // 路由和视图映射
        registry.addViewController("/user").setViewName("/user");
    }
}

当访问/user路由时,直接返回user.html页面。

5.3 拦截器

在请求的前后,对全局的请求做拦截。

/**
 * Created by wulei on 2017/6/8.
 *
 * 全局的时间拦截器
 */
public class TimeInterceptor extends HandlerInterceptorAdapter{
    private static Logger logger = Logger.getLogger(TimeInterceptor.class);

    /**
     * 请求执行前
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        logger.debug(request.getServletPath()   " StartTime:"   System.currentTimeMillis());
        return super.preHandle(request, response, handler);
    }

    /**
     * 请求执行后
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        logger.debug(request.getServletPath()   " EndTime:"   System.currentTimeMillis());
        super.postHandle(request, response, handler, modelAndView);
    }
}

拦截器定义完成后,要在配置类中实例化。

/**
 * Created by wulei on 2017/6/8.
 *
 * 重新配置MVC
 */
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter{
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(timeInterceptor());
    }

    @Bean
    public TimeInterceptor timeInterceptor(){
        return new TimeInterceptor();
    }
}

6.0 ORM层设计

6.1 连接MySQL

在application.properties配置数据库连接信息

# -----------    DB    --------------------
spring.jpa.database=MYSQL
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test_spring_boot?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root

Maven中配置JDBC依赖和Spring Data JPA的依赖。JPA是Spring Data的子项目,可以有效减少数据访问层的代码。

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

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

6.2 正向工程建表

我们可以通过定义Bean来定义表结构,并通过正向工程直接在数据库中生成相应的表。举个User的例子。

@Entity
public class User {
    @Id
    @GeneratedValue
    private Long id;

    private Integer age;

    private String name;

    private String address;

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
  • @Entity 声明这是一个跟数据库有映射关系的实体类
  • @Id 声明主键ID
  • @GeneratedValue 声明自增长

当工程启动的时候,自动生成数据库表。

6.3 数据库操作

通过继承JpaRepository接口,实现数据库操作。JpaRepository已经实现了一些基本的数据库操作

public interface UserRepository extends JpaRepository<User, Long> {
    // 按照地址查询地址
    List<User> findByAddress(String name);
}

简单数据库操作可以直接调用JpaRepository接口中定好的方法。如保存一个User对象。

    @Autowired
    public UserRepository userRepository;

    public static void main(String[] args) {
        User user = new User();
        user.setName(name);
        user.setAddress(address);
        user.setAge(age);
        userRepository.save(user);
     }

直接注入一个Repository。如果要自定义一个查询地址的方法如上findByAddress即可。更多操作可以参考官方文档。

http://docs.spring.io/spring-data/jpa/docs/2.0.0.M4/reference/html/

后话

还是很多东西可以聊,如构建权限控制,缓存的使用,事务的使用,后面慢慢聊。喜欢欢迎点赞,打赏。

编辑:编程 本文来源:服务也可以满足快速构建的需要,加完依赖之后

关键词: 澳门新濠3559